异常:
“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)”
Excel2003版的.xls文件读取 HSSFWorkbook workbook = new HSSFWorkbook(fs);
Excel2007版本的Excel文件读取 XSSFWorkbook workbook = new XSSFWorkbook(fs);
所以,在导入Excel的时候,尽量能判断导入Excel的版本,调用不同的方法。
我想到过使用文件后缀名来判断类型,但是如果有人将xlsx的后缀改为xls时,如果使用xlsx的函数来读取,结果是报错;虽然后缀名对了,但是文件内容编码等都不对。
最后,推荐使用package org.apache.poi.ss.usermodel包中WorkbookFactory.create(inputStream)来创建Workbook,因为HSSFWorkbook和XSSFWorkbook都实现了Workbook接口。代码如下:
Workbook wb = WorkbookFactory.create(is);
可想而知,在WorkbookFactory.create()函数中,肯定有做过对文件类型的判断,一起来看一下源码是如何判断的:
* Creates the appropriate HSSFWorkbook / XSSFWorkbook from
* the given InputStream.
* Your input stream MUST either support mark/reset, or
* be wrapped as a {@link PushbackInputStream}!
public static Workbook create(InputStream inp) throws IOException, InvalidFormatException {
// If clearly doesn't do mark/reset, wrap up
if(! inp.markSupported()) {
inp = new PushbackInputStream(inp, 8);
if(POIFSFileSystem.hasPOIFSHeader(inp)) {
return new HSSFWorkbook(inp);
if(POIXMLDocument.hasOOXMLHeader(inp)) {
return new XSSFWorkbook(OPCPackage.open(inp));
throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");
可以看到,有根据文件类型来分别创建合适的Workbook对象。是根据文件的头部信息去比对进行判断的,此时,就算改了后缀名,还是一样通不过。
异常:“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)”Excel2003版的.xls文件读取HSSFWorkbook ..
The 4Gb Double-
Data
-Rate-3 (DDR3(L)) DRAM is a high-speed CMOS SDRAM containing 4,294,967,296 bits.
It is internally configured as an octal-bank DRAM.
The 4Gb chip is organized as 64Mbit x 8 I/O x 8 banks and 32Mbit x16 I/O x 8 banks. These synchronous
devices achieve high speed double-
data
-rate transfer rates of up to 2133 Mb/sec/pin for general
app
lications.
The chip is designed to comply with all key DDR3(L) DRAM key features and all of the control and address
inputs are synchronized with a pair of externally
supplied
differential clocks. Inputs are latched at the cross
poi
nt of differential clocks (CK rising and falling). All I/Os are synchronized with a single ended DQS or
differential DQS pair in a source synchronous fashion.
These devices operate with a single 1.5V ± 0.075V or 1.35V -0.067V/+0.1V power supply and are available in
BGA packages.
please read the following items before using:
1.本站仅对原软件包“依样”打包,未做过任何改动,但不保证所提供软件或程序的完整性和安全性。
1.Our website only pack up the original software without any altering, but we cannot
guarantee the integrality and safety of the software or program.
2. 请在使用前查毒 (这也是您使用其它网络资源所必须注意的) 。
2.please check the virus before using-that s what you must pay attention to while usingother net resources.
3. 由本站提供的程序对您的网站或计算机造成严重后果的本站概不负责。
3.we are not responsible for the severe result of your website or computer caused by the program
supplied
by our website.
4. 转载本站提供的资源请勿删除本说明文件。
4.when you transfer the resources of our website, please do not delete this instruction.
The
supplied
data
app
ear
stobeintheOLE2Format.Youarecallingthepartof
POI
thatdealswithOO
XML
(
Office
Open
XML
)Documents.Youneedtocalladifferentpartof
POI
toprocessthis
data
(egHSSFinsteadofXSSF)
在做
Excel
导入功能时,发现导入的文件报错,代码中判断了文件类...
使用springMVC和
POI
处理
excel
文件,使用springMVC的MultipartFile接受文件流,在使用creat的时候报错。
InputStream inputStream = file.getInputStream();
Workbook workbook = WorkbookFactory.create(inputStream);
错误信息:
java.lang.IllegalArgumentException: Your InputStream was neither an
procedure TDCP_blockcipher.Init - Use this proc to initialize the cipher withthe key
data
. Size is the size of the key
data
you are supplying in BITS.IVector is a
poi
nter to the initialization vector needed for the chainingmodes the
data
supplied
for this must equal to the blocksize. If nil isspecified then an IV is generated automatically.
function [seg] = character_segmentation(bw)
% character_segmentation: Returns the digit segments in the
supplied
binary image.
% The function uses the "segment" function, keeping only the seven
% segments in the result with largest area, and in case less than seven
% segments were found, it attempts to recall the function, making the
% separation between the already found segments cl
ear
er (by cleaning the
% bits which are there.
之前碰到了一个因为导入一个
Excel
文件的问题
The
supplied
data
app
ear
s to be in the
Office
2007
+
XML
org.apache.
poi
.
poi
fs.filesystem.
Office
Xml
FileException: The
supplied
data
app
ear
s to be in the
Office
2007
+
XML
. You are calling the part of
POI
that deals with OLE2 Offic
the
supplied
data
app
ear
s 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)
### 回答1:
您提供的数据似乎是
Office
2007
+
XML
格式。您正在调用
POI
处理 OLE2
Office
文档的部分。您需要调用
POI
的另一部分来处理这些数据(例如 XSSF 而不是 HSSF)。
### 回答2:
如果在使用
POI
进行处理时遇到“the
supplied
data
app
ear
s to be in the
office
2007
XML
”的错误提示,那么这意味着数据是以
Office
2007
xml
的形式提供的。这个问题产生的原因是我们在处理
Office
文档时调用了处理ole2的
POI
模块,而
Office
2007
xml
格式的文档需要调用不同的
POI
模块来进行处理(比如xssf而不是hssf)。
POI
是一种流行的Java库,用于与Microsoft
Office
格式的文档进行交互。它提供了许多
POI
模块,每个模块都用于处理不同类型的
Office
文档格式,例如XSSF用于处理
Excel
2007
格式、HSSF用于处理
Excel
97-2003格式,而SXSSF用于大量处理
Excel
2007
格式。当我们使用
POI
进行
Office
文档处理时,必须选择正确的模块以正确地处理文档,否则会出现错误。
如果我们在处理
Office
2007
xml
格式的文档时出现了错误,可以轻松地调整我们的代码,将hssf替换为xssf,从而使用适当的
POI
模块,正确地处理
Office
2007
xml
格式的文档。需要注意的是,我们需要确保我们的代码是与我们正在处理的文档相匹配的
POI
模块,否则可能会出现不兼容的问题。
在选择
POI
模块时,应该根据正在处理的文档格式来选择正确的模块。如果处理的是
Excel
97-2003格式的文档,则应该使用HSSF模块;如果处理的是
Excel
2007
格式的文档,则应该使用XSSF模块。如果我们不确定正在处理的文档格式,则可以使用
POI
FS模块来检索有关文档的信息,从而找到正确的
POI
模块进行处理。
综上所述,当我们在处理
Office
文档时遇到“the
supplied
data
app
ear
s to be in the
office
2007
XML
”的错误提示时,应该检查我们正在使用的
POI
模块是否与文档格式匹配,并使用正确的模块来进行处理。这将确保我们能够正确地处理文档,避免出现不兼容的问题。
### 回答3:
首先,"The
supplied
data
app
ear
s to be in the
Office
2007
XML
"这句话意思是数据提供的格式是
Office
2007
XML
,这与通常的OLE2
Office
文件的格式不同。而“you are calling the part of
poi
that deals with ole2
office
documents”这句话的意思是你正在调用处理OLE2
Office
文档的
POI
的实现,这个实现不能处理
Office
2007
XML
格式的数据。所以,需要使用
POI
的另一部分来处理这个数据,比如XSSF.
其实就是两种不同的格式,所以
POI
需要不同的实现来处理不同格式的数据。如果想要处理
Office
2007
XML
格式的数据,就需要使用XSSF,而不是之前的HSSF。所以,这个错误信息是告诉我们,我们正在使用错误的
POI
实现来处理这个数据,需要改用兼容这个格式的
POI
实现。
总之,
POI
是一个Apache开发的用于操作
Office
的框架。这个错误提示告诉我们需要使用兼容
Office
2007
XML
格式的
POI
实现来处理这个数据。如果出现这个错误,我们需要更改相应的代码,使用XSSF来处理数据,而不是之前使用的HSSF,这样就可以正确地
读取
和处理
Office
2007
XML
格式的数据了。