这几天在开发时遇到了极其坑爹的问题。开发的主要功能是在导出某些订单数据至
Excel,因为自己一个一个去写表头这种操作代码耦合性实在太强,到时想要修改表头格式又需要回到去代码中修改,所以这是一种很愚蠢的零分操作!那么在这里就用到了POI
的Excel模版功能
(POI是apache提供给java对office进行读写操作的库,也是前些天开发时才了解到
)。模版作为一种资源文件就被我存放在聚合工程的某一module的/src/main/resources/exportconfig 目录下:
那么,具体问题是啥呢?就是我标题中说到的异常:
NotOLE2FileException: Invalid header signature; read 0xE011BDBFEFBDBFEF, expected 0xE11AB1A1E011CFD0
我也是第一次遇到如此神奇的异常呀!那么它究竟是个什么意思?经过相关搜索后发现是当POI在进行模板文件加载后,发现这个文件的格式不是标准的excel文件(.xls或者.xlsx),这个文件的格式不是excel,那么POI当然也就没办法打开了!
诸如stackoverflow这样的网站也有不少人贴出了这样的问题,上面给出的回复是我看到的excel文件仅仅是“看起来是”,事实上这可能是一个破损的或者是一个后缀强行加上了“xls”的其他格式的文件,所以很多热心网友给出的解决方案是通过excel打开这个文件,然后将文件“另存为”xls格式。在我满怀希望地经过多次这样的操作后,我发现这根本没有一点卵用(事实上,我发现无论是excel还是mac的numbers都可以很顺利地打开文件)。所以我隐隐觉得不应该是模板本身的格式问题。经过了多次奇奇怪怪的操作后,结果很显然是令我绝望的。当然,这些失败的经验也给我了一点启发:
会不会是工程在部署时格式被破坏了呢??学长大佬的一句话让我有一种茅塞顿开之感:工程在部署时是打成war包的,那么是不是在打包的时候出了问题?
于是我在本地将工程打成war包,命令如下:
mvn package -Dmaven.test.skip
在打包后,找到excel模板所在的jar包,解压后,打开,惊人地发现格式已经被破坏了!!
(这里出于隐私,就不贴出原本的模板文件了)
那么会是什么问题呢?但是可以肯定的是maven打包的时候出了问题!在经过相关查看后,发现pom文件中有这么一段<build> </build>下的依赖:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
这段依赖是什么意思呢?通过这段依赖可以
根据不同的环境(测试、预发、线上等环境)来过滤项目中的属性资源配置。到了这里,我大概也知道了就是因为这段依赖导致打包时excel文件被修改了。当问题可以被具像化时,我认为离成功就不远了!于是我就满怀激情地去调bug了!
首先我想到,那么可不可以
直接将filtering改成false
呢?结果很明显是不可以的——当不对属性资源进行过滤替换时,会出现spring无法读取某个变量的情况!
既然这个方案不行,那么接下来又尝试其他的方案:
在
filtering下配置<exclude> </exclude>
,根据网上其他的解决方案,配置了
<exclude></exclude>之后这个问题也没有被解决,当时我的心态都快奔了 - -
接着我又准备在
maven的打包插件下配置
<nonFilteredFileExtensions>
</nonFilteredFileExtensions>
,顾名思义就是不被过滤的文件后缀:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<webResources>
<resource>
<!-- 元配置文件的目录,相对于pom.xml文件的路径 -->
<directory>src/main/webapp/WEB-INF</directory>
<!-- 目标路径 -->
<targetPath>WEB-INF</targetPath>
<filtering>true</filtering>
</resource>
</webResources>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
这样的解决方案理应没什么毛病啊!那么为什么不对呢!为什么呢!为什么要对我这么残忍!然而我会放弃么?!不存在的,我这样
身残志坚
的选手人生字典中没有屈服这一说!于是,我尝试添加一个maven的插件,试图在maven打包时可以放过我的excel文件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
然后!问题就被解决了!通过maven本地打包后的excel模板文件正常了!
喜大普奔,撒花庆祝!
over~~~
Java用POI读取excel文件,报异常:NotOLE2FileException: Invalid header signature; read xxx, expected 0xE11AB1A1
这几天在开发时遇到了极其坑爹的问题。开发的主要功能是在导出某些订单数据至Excel,因为自己一个一个去写表头这种操作代码耦合性实在太强,到时想要修改表头格式又需要回到去代码中修改,所以这是一种很愚蠢的零分操作!那么在这里就用到了POI的Excel模版功能(POI是apache提供给java对office进行读写操作的库,也是前些天开发时才了解到)。模版作为一种资源文件就被我存放在聚合工程的某一mo...
Test
Read
Excel
, Test
Read
Excel
Demo
TestExport
Excel
, TestExport
Excel
2007 , TestWrite
Excel
Demo
TestTemplate , Test
Excel
Replace
CalendarDemo
Test
Excel
FormulaDemo , Test
Excel
StylingDemo , TestAll
HSSF,XSSF和XSSF类
Apache
POI
主类通常以HSSF , XSSF或SXSSF开头。
HSSF –是
POI
项目对
Excel
'97(-2007)
文件
格式的纯
Java
实现。 例如 , 。
XSSF –是
POI
项目对
Excel
2007 OOXML(.xlsx)
文件
格式的纯
Java
实现。 例如 , 。
SXSSF (自3.8-beta
Java
用
POI
读取
excel
文件
,
报
异常
:Not
OLE
2
File
Exception
:
Invalid
header
signature
;
read
xxx
,
expected
0xE11AB1A1
org.apache.
poi
.openxml4j.
exception
s.
OLE
2NotOfficeXml
File
Exception
: The supplied data appears to be in the
OLE
2 Format.
You are calling the part of
POI
that deals with OOXML (Office Open XML) D.
poi
导出
excel
或者word的时候,
报
java
.io.IO
Exception
:
Invalid
header
signature
;
read
0xE011BDBFEFBDBFEF,
expected
0xE11AB1A1
E011CFD0
解决方案:
1. 说是
文件
损坏,另存一下或者重新新建一个文档,然后将内容复制一份到新文档里,保存使用。
2. maven打包的时候,resource下的资源...
POI
创建workbook失败:org.apache.
poi
.
poi
fs.
file
system.Not
OLE
2
File
Exception
应该是
poi
版本有点老,在导入xls
文件
创建workbook时可以正常创建,在创建xlsx的时候,创建的workbook为空
if (
file
Path.indexOf(".xlsx") != -1) {
XSSFWorkbook wb = new XSSFWorkbook(inputStream);
return wb.getSheetAt(sheetInde
org.apache.
poi
JAR包,解决个人的
import org.apache.commons.beanutils.PropertyUtilsBean;
import org.apache.commons.lang.StringUtils;
import org.apache.
poi
.hssf.usermodel.HSSFCell;
import org.apache.
poi
.hssf.usermodel.HSSFCellStyle;
import org.apache.
poi
.hssf.usermodel.HSSFFont;
import org.apache.
poi
.hssf.usermodel.HSSFPalette;
import org.apache.
poi
.hssf.usermodel.HSSFRichTextString;
import org.apache.
poi
.hssf.usermodel.HSSFRow;
import org.apache.
poi
.hssf.usermodel.HSSFSheet;
import org.apache.
poi
.hssf.usermodel.HSSFWorkbook;
import org.
apache.
poi
.hssf.util.HSSFColor;
import org.apache.
poi
.hssf.util.Region;
import org.apache.
poi
.
poi
fs.
file
system.
POI
FS
File
System;
import org.apache.
poi
.ss.util.CellRangeAddress;
"The import org.apache.
poi
cannot be resolved"的问题
org.apache.
poi
JAR包,解决import org.apache.
poi
.hssf.usermodel.HSSFWorkbook;
支持office全系
excel
文件
解析。
import org.apache.
poi
.hssf.usermodel.HSSFCell;
import org.apache.
poi
.hssf.usermodel.HSSFRow;
import org.apache.
poi
.hssf.usermodel.HSSFSheet;
import org.apache.
poi
.hssf.usermodel.HSSFWorkbook;
import org.apache.
poi
.xssf.usermodel.XSSFCell;
import org.apache.
poi
.xssf.usermodel.XSSFRow;
import org.apache.
poi
.xssf.usermodel.XSSFSheet;
import org.apache.
poi
.xssf.usermodel.XSSFWorkbook;
使用Apache
POI
可以通过以下代码来
读取
Excel
文件
:// 创建
文件
输入流
File
InputStream
file
InputStream = new
File
InputStream(
file
Path);
// 创建Workbook对象
Workbook workbook = new XSSFWorkbook(
file
InputStream);
// 获取sheet
Sheet sheet = workbook.getSheetAt(0);
// 获取行
Row row = sheet.getRow(0);
// 获取单元格
Cell cell = row.getCell(0);
//
读取
单元格内容
String cellValue = cell.getStringCellValue();
Java用POI读取excel文件,报异常:NotOLE2FileException: Invalid header signature; read xxx, expected 0xE11AB1A1
27208
Java用POI读取excel文件,报异常:NotOLE2FileException: Invalid header signature; read xxx, expected 0xE11AB1A1
weixin_45844287:
Java用POI读取excel文件,报异常:NotOLE2FileException: Invalid header signature; read xxx, expected 0xE11AB1A1
昔别一展鲲鹏意:
Java用POI读取excel文件,报异常:NotOLE2FileException: Invalid header signature; read xxx, expected 0xE11AB1A1
baidu_22713295:
Java用POI读取excel文件,报异常:NotOLE2FileException: Invalid header signature; read xxx, expected 0xE11AB1A1
SuperFrank_He:
设计模式——工厂模式
weixin_44143830: