添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

异常: “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 格式的数据了。