poi The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with OOXML (Office Open XML) Documents. You need to call a different part of POI to process this data (eg HSSF instead of XSSF)
时间: 2025-06-06 22:18:35 浏览: 87
### 解决方案
在处理 Excel 文件时,Apache POI 库提供了两种主要的实现方式:HSSF 和 XSSF。HSSF 用于处理 `.xls` 格式的文件(OLE2 文件格式),而 XSSF 用于处理 `.xlsx` 格式的文件(Office Open XML 格式)。如果尝试使用 HSSF 处理 `.xlsx` 文件,就会抛出 `OfficeXmlFileException` 异常[^1]。
当遇到错误提示 `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)` 时,需要确保以下几点:
1. **确认文件格式**:检查文件是否为 `.xls` 格式。如果是 `.xlsx` 格式,则必须使用 XSSF 而不是 HSSF[^2]。
2. **依赖项配置**:如果需要处理 `.xlsx` 文件,请确保项目中引入了正确的依赖项。例如,XSSF 的相关类位于 `poi-ooxml` 模块中,而不是 `poi` 模块[^3]。以下是 Maven 配置示例:
```xml
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
```
3. **代码实现**:根据文件格式选择合适的 API。以下是分别使用 HSSF 和 XSSF 的代码示例:
- 使用 HSSF 处理 `.xls` 文件:
```java
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.FileInputStream;
public class HSSFExample {
public static void main(String[] args) throws Exception {
FileInputStream file = new FileInputStream("example.xls");
HSSFWorkbook workbook = new HSSFWorkbook(file);
// 进一步处理工作簿内容
workbook.close();
file.close();
}
}
```
- 使用 XSSF 处理 `.xlsx` 文件:
```java
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
public class XSSFExample {
public static void main(String[] args) throws Exception {
FileInputStream file = new FileInputStream("example.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(file);
// 进一步处理工作簿内容
workbook.close();
file.close();
}
}
```
如果文件确实是 `.xls` 格式,但仍然出现错误,请检查文件是否被损坏或是否包含不兼容的内容。
### 注意事项
- 如果需要同时支持 `.xls` 和 `.xlsx` 文件,可以使用 `WorkbookFactory` 自动检测文件类型并创建相应的 `Workbook` 实例:
```java
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import java.io.FileInputStream;
public class WorkbookFactoryExample {
public static void main(String[] args) throws Exception {
FileInputStream file = new FileInputStream("example.xls"); // 或 example.xlsx
Workbook workbook = WorkbookFactory.create(file);
// 进一步处理工作簿内容
workbook.close();
file.close();
}
}
```
阅读全文
相关推荐



















