一言不合先抛个异常

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文件兼容性问题相关推荐

  1. java word 题目导入_java使用poi导入word题库

    java使用poi导入word题库 包含单选,多选,填空,判断 //word图示 //具体代码,仅适合本人自己的格式 //代码一 InputStream inputStream = file.getI ...

  2. java输出excel 异常处理_使用poi导出Excel,并设定单元格内容类型,抛出异常

    本例子使用的是HSSF,为Excel2003提供处理方案. 设定为输入类型为数值 import org.apache.poi.hssf.usermodel.DVConstraint; import o ...

  3. java自动生成生成java透视表_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  4. java excel 透视_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  5. java excel里对角线,使用POI在excel文件单元格实现对角线

    [java POI操作Excel文件(合并单元格.插入图片.超链接)] 查看POI的API可以发现HSSFBorderFormatting.setBoderDiagonal接口,尝试使用这个接口并没有 ...

  6. java excel 模板 替换_JAVA POI替换EXCEL模板中自定义标签(XLSX版本)满足替换多个SHEET中自定义标签...

    个人说明:为了简单实现导出数据较少的EXCEL(根据自定义书签模板) 一.替换Excel表格标签方法 ``` /** * 替换Excel模板文件内容 * @param map * 需要替换的标签建筑队 ...

  7. java实现在线预览----poi操作excel转html及03、07版本兼容问题

    poi操作excel转html及其兼容问题 excel03是读取文件整个内容转为字符串存进html,excel07是读取文件内容拼成字符串存进html /*** excel03转html* filen ...

  8. java poi excel 导入数据库_java POI 处理excel表格数据并导入数据库示例

    java操作Excel最常用的开源组件有poi与jxl.jxl是韩国人开发的,发行较早,但是更新的很慢,目前似乎还不支持excel2007. poi是apache下的一个子项目,poi应该是处理ms的 ...

  9. java去除多余excel_java使用poi删除excel中的空行

    根据自己实际操作,poi中lastRowNum方法获取行数的是excel最后有数据的一行,从0开始 而physicalNumberOfRows方法获取的行数是excel最后有数据的一行减去最后一行之前 ...

最新文章

  1. 德鲁克《管理的实践》笔记
  2. css 命名规范 BEM
  3. SHT30温湿度传感器驱动设计分析及代码实现
  4. php根据手机号码获取省份
  5. 图形学必备!斯坦福图形学几何处理算法课程2——Shape Matching Correspondence
  6. ssis 导入excel_使用SSIS包将MS Excel数据导入数据库
  7. Apache环境利用.htaccess文件设置域名301跳转(不带www跳转到带www)
  8. POJ 3069 Saruman's Army (贪心)
  9. yolo标注文件转换工具,python做的
  10. 最历害的硬盘修复工具PC3000,可重置SMART状态!
  11. 英特尔第十代处理器为什么不支持win7_为什么7代CPU不支持WIN7操作系统?
  12. 神经元人体分布大图,人体的神经元图片
  13. 2021 苟且活着,2022 向上生长
  14. 【嵌入式系统开发12】在stm32F103C8T6环境下,用HAL库,采用中断模式编程,控制LED的高亮与熄灭
  15. 经济学人翻译练习——肯•帕克斯顿的再次竞选是对德克萨斯共和党价值观的考验
  16. android 随机坐标,按键精灵安卓版如何随机坐标判断点击.在线等大神回复
  17. 深度学习笔记整理(五)——提高泛化能力的方法
  18. 《OpenCV3编程入门》学习笔记之书本资源汇总
  19. 一个科研工作者怎么算很努力
  20. C++的STL库,vector sort排序时间复杂度 及常见容器比较

热门文章

  1. 2015年第1本读书行动笔记:《把你的英语用起来》
  2. 【LabVIEW花样翻新】前言
  3. [荐]没羽箭张清到底连打梁山多少好汉?
  4. 高通平台抓取WiFi日志
  5. “天才就是1%的灵感加上99%的汗水”还有后半句
  6. 微型计算机外部接口图,自考《微型计算机及其接口技术》学习方法(2)
  7. 创建Windows10 密码重设盘
  8. 检测到磁盘可能为uefi引导_如何用uefi引导安装win7
  9. C++ 裁剪图片 分割图片 截图
  10. echarts生成湖南省地图