java poi 操作excel总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ITlyng/article/details/56279112

Poi是apache旗下的一个开源组件,提供一套java的api对word、excel等文档进行操作。


使用HSSF进行excel文件写操作:


   HSSF只支持97-03版本excel,扩展名是.xls,(每个sheet行数最大65536行)。
  缺点:如果写数据量大文件,可能会导致内存溢出,原因,将所有数据对象放在内存中,最后执行文件内容写。

  优点:对于小数据量文件写操作,速度很快的。


 使用XSSF对excel写操作:
   XSSF只支持07以上版本excel,扩展名是.xlsx(不向下兼容), 每个sheet对行数据没 限制。
  优点:对大数据量文件执行写操作,不会导致内存溢出,原因,在写的过程中生成很多临时文件,一边写一边生成文件(内存中不会保留很多数据),最后将临时文件合并输出。

  缺点:对大数据量写操作,速度不快。


   使用HSSF或XSSF读取文件,实现数据导入,一般情况下03版本的65536行数据量够用。
      如果本机安装07版本的excel软件,使用HSSF导入,可以将.xlsx另存为03版本的文件。

-------------------------------------------------------------------------------
1.使用HSSF 和 XSSF导出excel
HSSF只操作.xls文件(97-03版本excel),一个sheet中行有限制,最大65536行。
第一步:创建workbook工作簿(excel文档)
Workbook wb = new HSSFWorkbook();
    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    wb.write(fileOut);
    fileOut.close();


第二步:创建一个sheet工作表


Sheet sheet3 = wb.createSheet(safeName);


第三步:在sheet中创建row行


Row row = sheet.createRow((short)0);


第四步:在row行中创建cell单元格
Cell cell = row.createCell(0);


第五步:向cell中写数据
cell.setCellValue(1);


第六步:输出excel文件(写文件)


wb.write(fileOut);
    fileOut.close();




测试代码:


// 创建文件输出流
FileOutputStream out = new FileOutputStream("d:/workbook.xls");
// 创建一个工作簿
Workbook wb = new HSSFWorkbook();

for (int j = 0; j < 1; j++) {
Sheet s = wb.createSheet();//创建1个sheet
wb.setSheetName(j, "sheet" + j);//指定sheet的名称
//xls文件最大支持65536行
for (int rownum = 0; rownum < 65536; rownum++) {//创建行,.xls一个sheet中的行数最大65535
// 创建一行
Row r = s.createRow(rownum);


for (int cellnum = 0; cellnum < 10; cellnum ++) {//一行创建10个单元格
// 在行里边创建单元格
Cell c = r.createCell(cellnum);
//向单元格写入数据
c.setCellValue(cellnum);


}


}


}
System.out.println("int..............");
wb.write(out);//输出文件内容




try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.close();






使用上边的测试代码,在一个工作簿中导出多个sheet,出现内存溢出


 


出现内存溢出原因,HSSF工作原理,将excel中所有数据填充到java对象中,进行文件写操作。


缺点:
如果数据大,引起内存溢问题。


优点:
编程方便,如果数据量小,速度很快的。


2.XSSF导出 excel


XSSF操作03以上版本(07版本)excel,扩展名.xlsx,工作表行数没有限制


写excel文件步骤:


第一步:创建一个工作簿
SXSSFWorkbook wb = new SXSSFWorkbook(-1);
-1:关闭自动刷新
SXSSFWorkbook wb = new SXSSFWorkbook(XXXX);(自动刷新)
XXXX:保持内存中有XXXX条记录,超过部分写入磁盘


第二步:创建一个工作表
//创建一个sheet
Sheet sh = wb.createSheet();


第三步:在sheet中创建行
Row row = sh.createRow(rownum);
第四步:创建单元格
Cell cell = row.createCell(cellnum);
第五步:向单元格中写数据
cell.setCellValue(address);


第六步:将内容写入磁盘
由于-1设置关闭自动刷新
需要人工主动刷新
调用:
((SXSSFSheet)sh).flushRows(100);


第七步:输出文件
wb.write(out);//将临时写的文件合并,输出整个文件




跟踪代码:
向磁盘刷新数据,生成临时文件:

猜你喜欢

转载自blog.csdn.net/ITlyng/article/details/56279112