java excel导入兼容性,使用poi导入Excel文件兼容性问题
一言不合先抛个异常
org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
HSSFWorkbook workbook = new HSSFWorkbook(in);
这段异常表示excel版本和workbook的类型不匹配导致的, HSSFWorkbook不支持Excel2007之后的文件版本, poi提供了XSSFWorkbook类型支持后面的版本,
XSSFWorkbook workbook = new XSSFWorkbook(in);
但是这段代码对老版本的excel不兼容, 查看文档和源码发现HSSFWorkbook和XSSFWorkbook都实现了Workbook接口, 按照网上推荐的方法, 把代码修改成了
Workbook workbook = null;
try{
workbook = new HSSFWorkbook(in);
}catch(Exception e){
workbook = new XSSFWorkbook(in);
}
然后. 成功的抛出了另一个异常
java.io.IOException: Stream closed
这.... 节奏不对啊, 进入try块之后顺手把流关了, 这个方法也搞不定, 难道不用流来做参数?? 还是先判断一下流的类型????
怎么判断???? 我是不会, 好吧, 看文档, 我相信apache肯定能解决这个问题
好了, 代码改成了
Workbook workbook = WorkbookFactory.create(in);
一切都正常了. 那么这个方法一定是判断了文件类型的, 废话不多说, 贴源码
public static Workbook create(InputStream inp, String password) throws IOException, InvalidFormatException, EncryptedDocumentException {
// If clearly doesn't do mark/reset, wrap up
if (! inp.markSupported()) {
inp = new PushbackInputStream(inp, 8);
}
// Ensure that there is at least some data there
byte[] header8 = IOUtils.peekFirst8Bytes(inp);
// Try to create
if (NPOIFSFileSystem.hasPOIFSHeader(header8)) {
NPOIFSFileSystem fs = new NPOIFSFileSystem(inp);
return create(fs, password);
}
if (DocumentFactoryHelper.hasOOXMLHeader(inp)) {
return new XSSFWorkbook(OPCPackage.open(inp));
}
throw new InvalidFormatException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");
}
当然, maven的依赖要改成这个了
org.apache.poi
poi-ooxml
3.15
java excel导入兼容性,使用poi导入Excel文件兼容性问题相关推荐
- java word 题目导入_java使用poi导入word题库
java使用poi导入word题库 包含单选,多选,填空,判断 //word图示 //具体代码,仅适合本人自己的格式 //代码一 InputStream inputStream = file.getI ...
- java输出excel 异常处理_使用poi导出Excel,并设定单元格内容类型,抛出异常
本例子使用的是HSSF,为Excel2003提供处理方案. 设定为输入类型为数值 import org.apache.poi.hssf.usermodel.DVConstraint; import o ...
- java自动生成生成java透视表_java基于poi导出excel透视表代码实例
这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...
- java excel 透视_java基于poi导出excel透视表代码实例
这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...
- java excel里对角线,使用POI在excel文件单元格实现对角线
[java POI操作Excel文件(合并单元格.插入图片.超链接)] 查看POI的API可以发现HSSFBorderFormatting.setBoderDiagonal接口,尝试使用这个接口并没有 ...
- java excel 模板 替换_JAVA POI替换EXCEL模板中自定义标签(XLSX版本)满足替换多个SHEET中自定义标签...
个人说明:为了简单实现导出数据较少的EXCEL(根据自定义书签模板) 一.替换Excel表格标签方法 ``` /** * 替换Excel模板文件内容 * @param map * 需要替换的标签建筑队 ...
- java实现在线预览----poi操作excel转html及03、07版本兼容问题
poi操作excel转html及其兼容问题 excel03是读取文件整个内容转为字符串存进html,excel07是读取文件内容拼成字符串存进html /*** excel03转html* filen ...
- java poi excel 导入数据库_java POI 处理excel表格数据并导入数据库示例
java操作Excel最常用的开源组件有poi与jxl.jxl是韩国人开发的,发行较早,但是更新的很慢,目前似乎还不支持excel2007. poi是apache下的一个子项目,poi应该是处理ms的 ...
- java去除多余excel_java使用poi删除excel中的空行
根据自己实际操作,poi中lastRowNum方法获取行数的是excel最后有数据的一行,从0开始 而physicalNumberOfRows方法获取的行数是excel最后有数据的一行减去最后一行之前 ...
最新文章
- 德鲁克《管理的实践》笔记
- css 命名规范 BEM
- SHT30温湿度传感器驱动设计分析及代码实现
- php根据手机号码获取省份
- 图形学必备!斯坦福图形学几何处理算法课程2——Shape Matching Correspondence
- ssis 导入excel_使用SSIS包将MS Excel数据导入数据库
- Apache环境利用.htaccess文件设置域名301跳转(不带www跳转到带www)
- POJ 3069 Saruman's Army (贪心)
- yolo标注文件转换工具,python做的
- 最历害的硬盘修复工具PC3000,可重置SMART状态!
- 英特尔第十代处理器为什么不支持win7_为什么7代CPU不支持WIN7操作系统?
- 神经元人体分布大图,人体的神经元图片
- 2021 苟且活着,2022 向上生长
- 【嵌入式系统开发12】在stm32F103C8T6环境下,用HAL库,采用中断模式编程,控制LED的高亮与熄灭
- 经济学人翻译练习——肯•帕克斯顿的再次竞选是对德克萨斯共和党价值观的考验
- android 随机坐标,按键精灵安卓版如何随机坐标判断点击.在线等大神回复
- 深度学习笔记整理(五)——提高泛化能力的方法
- 《OpenCV3编程入门》学习笔记之书本资源汇总
- 一个科研工作者怎么算很努力
- C++的STL库,vector sort排序时间复杂度 及常见容器比较