您的位置:首页 > 其它

poi生成excel表格(xls或者xlsx格式),多个工作sheet

2016-02-24 13:44 274 查看
一、工具类中的生成xlsx格式的方法

/**

*

* @方法功能备注: 导出日报汇总和部分销售流水Excel的方法

* @修改日期: 2016-2-17 下午04:10:40

* ----------------------------------------------------------------------------------------------------------------

* @修改历史

* 序号 日期 修改人 修改原因

*

*

* ----------------------------------------------------------------------------------------------------------------

* @备注:

* @param workbook,工作表

* @param sheetNum,sheet的位置,0表示第一个表格中的第一个sheet

* @param sheetTitle,sheet工作簿的名称,如sheet1是"汇总",sheet2是"流水"

* @param headers
, 表格里面的标题

* @param result
, 表格里需要的数据

* @param out
,输出流

* @throws Exception:

* @测试结果:通过 未通过

*/

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.util.HSSFColor;

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import org.apache.poi.xssf.usermodel.XSSFFont;

import org.apache.poi.xssf.usermodel.XSSFRichTextString;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public void exportExcel(XSSFWorkbook workbook, int sheetNum,String sheetTitle, String[] headers, List<List<String>> result,

OutputStream out) throws Exception {

// 第一步,创建一个webbook,对应一个Excel以xsl为扩展名文件

XSSFSheet sheet = workbook.createSheet();

workbook.setSheetName(sheetNum, sheetTitle);

//设置列宽度大小

sheet.setDefaultColumnWidth((short) 20);

//第二步, 生成表格第一行的样式和字体

XSSFCellStyle style = workbook.createCellStyle();

// 设置这些样式

style.setFillForegroundColor(HSSFColor.PALE_BLUE.index);

style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

style.setBorderRight(HSSFCellStyle.BORDER_THIN);

style.setBorderTop(HSSFCellStyle.BORDER_THIN);

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

// 生成一个字体

XSSFFont font = workbook.createFont();

font.setColor(HSSFColor.BLACK.index);

//设置字体所在的行高度

font.setFontHeightInPoints((short) 20);

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

// 把字体应用到当前的样式

style.setFont(font);

// 指定当单元格内容显示不下时自动换行

style.setWrapText(true);

// 产生表格标题行

XSSFRow row = sheet.createRow(0);

for (int i = 0; i < headers.length; i++) {

XSSFCell cell = row.createCell((short) i);

cell.setCellStyle(style);

XSSFRichTextString text = new XSSFRichTextString(headers[i]);

cell.setCellValue(text.toString());

}

// 第三步:遍历集合数据,产生数据行,开始插入数据

if (result != null) {

int index = 1;

for (List<String> m : result) {

row = sheet.createRow(index);

int cellIndex = 0;

for (String str : m) {

XSSFCell cell = row.createCell((int) cellIndex);

cell.setCellValue(str.toString());

cellIndex++;

}

index++;

}

}

}

/**

*

* @方法功能备注:导出汇总和流水的数据

* @修改日期: 2016-2-17 下午02:50:16

* ----------------------------------------------------------------------------------------------------------------

* @修改历史

* 序号 日期 修改人 修改原因

*

*

* ----------------------------------------------------------------------------------------------------------------

*@备注:

* @测试结果:通过

*/

/**测试生成excel表格数据*/

import java.io.FileOutputStream;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.junit.Test;

@Test

public void testPOI(){

GeneratWaterUtil gwu=null;

String path=null;

try {

gwu=new GeneratWaterUtil();

path="D:\\test2.xlsx";

//1、输出的文件地址及名称

OutputStream out = new FileOutputStream(path);

//2、sheet表中的标题行内容,需要输入excel的汇总数据

String[] summary = { "系统名称", "活动名称","门店号" ,"日报时间","发券数量","使用数量"};

List<List<String>> summaryData = new ArrayList<List<String>>();

List<SummaryInfo> _listSummary=new ArrayList<SummaryInfo>();

for (SummaryInfo sum:_listSummary) {

List<String> rowData = new ArrayList<String>();

rowData.add(sum.getXtmc());

rowData.add(sum.getHdmc());

rowData.add(sum.getMdh());

rowData.add(sum.getCreatTime());

rowData.add(String.valueOf(sum.getHandoutTotal()));

rowData.add(String.valueOf(sum.getUseTotal()));

summaryData.add(rowData);

}

String[] water = { "系统名称", "门店号" ,"门店名称","小票号","活动编号"

,"活动名称","发券数量","商品条码","商品名称","购买数量"

,"发券时间","分类代码","是否领赠","数据是否为真"};

List<List<String>> waterData = new ArrayList<List<String>>();

List<GenerWater> _listWater=new ArrayList<GenerWater>();

for (GenerWater wat:_listWater) {

List<String> rowData = new ArrayList<String>();

rowData.add(wat.getXtmc());

rowData.add(wat.getMdh());

rowData.add(wat.getMdmc());

rowData.add(wat.getXph());

rowData.add(wat.getHdbh());

rowData.add(wat.getHdmc());

rowData.add(wat.getFqsl());

rowData.add(wat.getSptm());

rowData.add(wat.getSpmc());

rowData.add(wat.getSl());

rowData.add(wat.getFqsj());

rowData.add(wat.getFldm());

rowData.add(wat.getSflq());

rowData.add(wat.getReal());

waterData.add(rowData);

}

//3、生成格式是xlsx可存储103万行数据,如果是xls则只能存不到6万行数据

XSSFWorkbook workbook = new XSSFWorkbook();

//第一个表格内容

gwu.exportExcel(workbook, 0, "日报汇总", summary, summaryData, out);

//第二个表格内容

gwu.exportExcel(workbook, 1, "部分流水数据", water, waterData, out);

//将所有的数据一起写入,然后再关闭输入流。

workbook.write(out);

out.close();

} catch (Exception e) {

e.printStackTrace();

}

}

二、生成xls格式的表格

只需要修改

1、XSSFWorkbook

2、XSSFFont

3、XSSFRichTextString

4、XSSFCellStyle

5、XSSFRow

成为:HSSFWorkbook 、HSSFFont、HSSFRichTextString、H[b]SSFCellStyle、[b]HSSFRow即可[/b][/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: