Java POI WPS另存为的XLSX Excel报错Package should contain a content type part [M1.13]
最近在写项目的时候,使用到了POI对表格的处理,在通过文件流创建工作簿的时候,出现异常,异常信息是:Package should contain a content type part [M1.13]
。在这里,记录下这个信息,也供大家参考。
问题描述:
先看我的测试代码:
String templatePath = this.getClass().getResource("/").getPath()+"/static";
FileInputStream excelFileInputStream = new FileInputStream(templatePath + "/测试模板.xlsx");
Workbook workbook = WorkbookFactory.create(excelFileInputStream);
excelFileInputStream.close();
Sheet sheet = workbook.getSheetAt(0);
Row xssfRow = sheet.getRow(5); Cell xssfCell = xssfRow.getCell(0); xssfCell.setCellValue("交货状态:" + map.get("status").toString());
xssfRow = sheet.getRow(5); xssfCell = xssfRow.getCell(15); xssfCell.setCellValue(map.get("machineNo").toString());
// 省去其他填充字段
FileOutputStream excelFileOutPutStream = new FileOutputStream("C:/测试模板-" + key + ".xlsx");
workbook.write(excelFileOutPutStream);
excelFileOutPutStream.flush();
excelFileOutPutStream.close();
这段代码运行,抛POI异常:Package should contain a content type part [M1.13]
这个异常的原因可能有多种,查找资料发现,大多数回答都是该异常是由于 Excel 2003和2007之间的区别导致的,或者就是说文件是直接改后缀名得到(改后缀名也是会导致异常)。 Excel 2003和2007之间的区别:
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
原因分析:
Excel 的版本,我使用的是WPS 2019 个人版的,也就是后缀为.xlsx
,按理说没什么问题的。
而且模板文件也是新建的,不存在是通过改后缀名得到的(后缀名由.xls
改为.xlsx
也是不能识别的)。
此XLSX文件是通过《WPS 2019 个人版》将一个XLS文件另存为XLSX的。可能使用WPS导出的时候有些关键的XLSX文件头没有加入进去导致POI无法识别这是一个2007的XLSX文件。
解决方案:
使用必应搜索online convert
,打开https://www.online-convert.com,在Document Converter的下拉框中选择Convert to XLSX,然后将WPS另存为的XLSX文件上传,再转换一次XLSX。将这个再转换的XLSX导入进Java的程序。问题解决。
此网站转换后生成的文档有些字体发生了变化,如果对格式有严格要求,需要再进行调整。转换后的XLSX文件使用WPS编辑保存后也可以在Java POI程序中使用。
参考:POI异常信息:Package should contain a content type part [M1.13]
Java POI WPS另存为的XLSX Excel报错Package should contain a content type part [M1.13]相关推荐
- poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
导入excel文件POI解析 时报错: FileInputStream file = new FileInputStream(new File("G:\\TestData\\test.xls ...
- java poi读取excel报错Your InputStream was neither an OLE2 stream, nor an OOXML stream
错误描述 java poi读取excel报错Your InputStream was neither an OLE2 stream, nor an OOXML stream 楼主是读取的另存为的exc ...
- 使用poi导出excel报错-打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
使用poi导出excel报错-打开文件报"Excel 已完成文件级验证和修复.此工作簿的某些部分可能已被修复或丢弃" 1.原本正常使用的Excel导出突然下载文件报错 2.定位时发 ...
- import win32com.client 将xls改成xlsx,操作excel报错
import win32com.client 将xls改成xlsx,操作excel报错 一:代码如下: excel = win32com.client.DispatchEx('Excel.Applic ...
- 关于java导出Excel报错65535的解决方案
关于java导出Excel报错65535的解决方案 java.lang.IllegalArgumentException: Invalid row number (65536) outside all ...
- oracle.sql.clob 报错,oracle11g java导出excel报错oracle.sql.CLOB@xxxx问题
在项目中遇到,生产导出excel报错的问题 oracle.sql.CLOB@xxxx的错误,测试导出没问题,一样的代码. 原来oracle数据库从10g以后,使用wm_concat,函数返回值会自动转 ...
- readxl包导入excel报错Error: `path` does not exist解决方法
readxl包导入excel报错Error: `path` does not exist解决方法 方法1:File - import dataset - from excel 方法2:检查语法错误 正 ...
- Matlab使用xlsread读xlsx文件报错处理
Matlab使用xlsread读xlsx文件报错处理 报错:错误使用 xlsread (line 136) 无法打开文件 .... 原因:Matlab读入xlsx文件需要启用excel的com端口.如 ...
- python 读取xlsx文件报错,解决方法 ( xlrd 2.0.1 仅支持 .xls 文件)
一.问题: python读取xlsx文件报错,报错信息如下: 为什么会报错?那是因为xlrd 2.0.1 仅支持 .xls 文件. 二.解决方法: 1.确认自己安装的xlrd版本: 可以先用以下命令看 ...
最新文章
- php解析ip列表并入库
- bugzilla dbd-mysql_Linux下安装Bugzilla——完整版
- selenium 测试
- .net (object sender, EventArgs e) 学习总结
- VC++实现混合静态分裂视窗的方法
- 树莓派 python 无人机_DIY一个基于树莓派和Python的无人机视觉跟踪系统
- Best Coder Lotus and Characters
- 倒角距离(Chamfer distance)和earth mover‘s diatance
- HTML|CSS之布局相关总结
- html怎么设置顶部布局,html – CSS位置:固定没有顶部给出意想不到的布局?
- 从我的公众号谈执行力
- Clob,Blob,InputStream,byte 互转
- 剑指offer总目录
- 河南省第二届“金盾信安杯”网络安全大赛 WriteUp Crypto+Misc
- vector_back
- 《用户至上:用户研究方法与实践(原书第2版)》一1.1 什么是用户体验
- .NetCore Mediator的简单使用
- 【Linux练习生】线程安全
- 蓝桥杯模拟题.花园灌溉(bfs)
- VC正则表达式的使用(《VC知识库》)