如何不升级POI生成兼容Excel 2007新标准文件?

摘要:开心一刻 记得小时候,家里丢了钱,是我拿的,可爸妈却一口咬定是弟弟拿的 爸爸把弟弟打的遍体鳞伤,弟弟气愤的斜视着我 我不敢直视弟弟,目光转向爸爸说到:爸爸,你看他,好像还不服 问题描述 项目基于 POI 4.1.2 生成 Excel 200
开心一刻 记得小时候,家里丢了钱,是我拿的,可爸妈却一口咬定是弟弟拿的 爸爸把弟弟打的遍体鳞伤,弟弟气愤的斜视着我 我不敢直视弟弟,目光转向爸爸说到:爸爸,你看他,好像还不服 问题描述 项目基于 POI 4.1.2 生成 Excel 2007 文件,已经对接了很多客户,也稳定运行了好几年了;就在前两天,对接一个新的客户,生成的 Excel 2007 文件导入他们的系统失败,提示: -700006004当前Excel表单列名中未查找到该列. 实话实说,这个提示对我而言,一毛钱作用没有,那就只能问他们系统的开发人员了;经过半天的排查,他们的开发人员给出的结论是: 你们的Excel 2007文件看着像是旧版的,不符合新版标准 这个回答让我更懵了,触及到我的知识盲区,都不直到如何接话了 Excel 2007 文件还有标准与非标准之分?这个问题我们先不纠结,本着优先解决问题的原则,试着去尝试升级下 POI 的版本 为什么第一时间想到的是升级 POI 版本?因为是用 POI 生成的 Excel 2007 文件嘛(貌似等于没说) 将 POI 版本升级到 5.3.0,代码不做任何调整,重新生成文件发送给客户,客户验证可以正常导入;你们是不是以为事情到此告一段落,升级 POI 版本就好了嘛,我只能说你们是有了新欢忘了旧爱,已经对接的客户怎么办?你敢保证升级 POI 后生成的 Excel 2007(2003 也会跟着受影响)还能正常导入这些客户的系统吗,所以我们的野心能不能更大一些:新欢旧爱都要! 既对已有客户不造成影响,又能满足新客户要求,也就引申出了本文标题 不升级 POI 版本,如何生成符合新版标准的Excel 2007文件 是个压缩包 从 Excel 2007 开始,Microsoft 采用了新的文件格式,称为开放的 XML 文件格式,很好地改进了文件和数据管理、数据恢复和可交互能力;而 Excel 2007 就是是一个包含 XML、图片等文件的压缩包;我们暂且先只关注 XML,先基于 POI 4.1.2 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> String filePath = "D:/POI_4_1_2.xlsx"; public void createExcel(String filePath) throws Exception { try(SXSSFWorkbook wb = new SXSSFWorkbook(); OutputStream os = Files.newOutputStream(Paths.get(filePath))) { SXSSFSheet sheetA = wb.createSheet("a"); SXSSFSheet sheetB = wb.createSheet("b"); SXSSFRow sheetA_row1 = sheetA.createRow(0); sheetA_row1.createCell(0).setCellValue("hello world"); sheetA_row1.createCell(1).setCellValue("666"); SXSSFRow sheetA_row2 = sheetA.createRow(1); sheetA_row2.createCell(0).setCellValue("888"); sheetA_row2.createCell(1).setCellValue("999"); SXSSFRow sheetB_row1 = sheetB.createRow(0); sheetB_row1.createCell(0).setCellValue("qsl")
阅读全文