首页 > 编程 > Java > 正文

java poi 操作excel总结

2019-11-08 01:22:12
字体:
来源:转载
供稿:网友

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

使用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导出excelHSSF只操作.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个sheetwb.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 blocke.printStackTrace();}out.close();使用上边的测试代码,在一个工作簿中导出多个sheet,出现内存溢出 出现内存溢出原因,HSSF工作原理,将excel中所有数据填充到java对象中,进行文件写操作。缺点:如果数据大,引起内存溢问题。优点:编程方便,如果数据量小,速度很快的。2.XSSF导出 excelXSSF操作03以上版本(07版本)excel,扩展名.xlsx,工作表行数没有限制写excel文件步骤:第一步:创建一个工作簿SXSSFWorkbook wb = new SXSSFWorkbook(-1);-1:关闭自动刷新SXSSFWorkbook wb = new SXSSFWorkbook(XXXX);(自动刷新)XXXX:保持内存中有XXXX条记录,超过部分写入磁盘第二步:创建一个工作表//创建一个sheetSheet 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);//将临时写的文件合并,输出整个文件跟踪代码:向磁盘刷新数据,生成临时文件:
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表