POI读取SXSSFWorkbook生成的xlsx格式文件失败

weixin_38062043 2015-04-30 04:31:55
    在进行数据量较大的excel文件读取时,采用了SXSSFWorkbook来写excel文件,生成的xlsx格式的文件通过ftp下载到本地后,无法通过POI xlsx转cvs再采用xml方式读取,但是可以通过 Workbook 方式读取到数据。     因为数据量会达到10W+,所以将之前的读写方式都改造成xlsx格式,但目前就卡在了生成文件再读取的问题上。奇怪的是下载的excel文件,打开后启用编辑,随便点击某个单元格,不修改内容,关闭时就提示保存,保存后再通过转cvs的方式读取,就能正常读取数据了。考虑过是不是网络下载文件不安全,视图受保护的影响,但这个也是开放了读权限的。     现在不知道从哪儿下手了,不知道是生成excel的时候有问题,还是读的时候有问题。有没有遇到过类似问题的朋友,帮忙给分析下吧。。。。
...全文
231 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
POI海量数据⼤数据⽂件⽣成 海量数据⼤数据⽂件⽣成SXSSFWorkbook使⽤简介 使⽤简介   在之前我们知道处理xls的excel⽤的workbook是HSSFWorkbook,处理xlsx的excel⽤的是XSSFWorkbook。   上⾯两个类导出excel的时候数据会驻留在内存中,所以当数据量⼤的时候容易造成内存溢出。SXSSFWorkbook是⽤来⽣成海 量excel数据⽂件,主要原理是借助临时存储空间⽣成excel。POI要求3.8以上,⽣成的⽂件格式要求是07及以上版本,因为excel07级以 上版本的⾏数1048576,量很⼤,⽽03版本的只有6万多。   读取07及以上版本的excel仍然是"XSSFWorkbook",写⼊则为"SXSSFWorkbook "。 导出的代码:(⼀个简单的测试,如果想封装⼯具类,参考:) package cn.xm.exam.utils; import java.io.File; import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook; public class SXSSFExcelUtil { public static void main(String[] args) { String[] title = { "id", "name", "sex" }; // 创建⼀个⼯作簿 Workbook workbook = new SXSSFWorkbook(); // 创建⼀个⼯作表sheet Sheet sheet = workbook.createSheet(); // 创建第⼀⾏ Row row = sheet.createRow(0); // 创建⼀个单元格 Cell cell = null; // 创建表头 for (int i = 0; i < title.length; i++) { cell = row.createCell(i); cell.setCellValue(title[i]); } // 从第⼆⾏开始追加数据 for (int i = 1; i <= 10000; i++) { // 创建第i⾏ Row nextRow = sheet.createRow(i); // 参数代表第⼏列 Cell cell2 = nextRow.createCell(0); cell2.setCellValue("a" + i); cell2 = nextRow.createCell(1); cell2.setCellValue("user" + i); cell2 = nextRow.createCell(2); cell2.setCellValue("男"); } // 创建⼀个⽂件 File file = new File("G:/tt1.xls"); try { file.createNewFile(); // 打开⽂件流 FileOutputStream outputStream = new FileOutputStream(file); workbook.write(outputStream); outputStream.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 补充:SXFFSWoorkbook导出的excel相⽐于XSSFWoorkbook导出的更节省空间: 下⾯分别是SXXFS\XFFS\HFFS导出上⾯1万条数据的excel的⽂件⼤⼩: 补充:测试HSSF\XSSF导出的数据占⽤内存,⽽SXFFS导出的数据不容易造成内存溢出 数据改为5万条并且写⼊之后查看内存信息: (1)查看XSSF导出的时候占⽤JVM内存 package cn.xm.exam.utils; import java.io.File; import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache

435

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧