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)错误怎么解决
时间: 2023-07-19 09:31:22 浏览: 138
这个错误的原因是你使用了POI库中处理OLE2 Office文档的部分,而你提供的数据是Office 2007+ XML格式的。因此,你需要使用POI库中处理XML文档的部分来处理这个数据。
具体来说,你需要使用XSSF而不是HSSF来读取或写入Office 2007+ XML格式的文件。下面是一个简单的读取Excel文件的例子:
```java
//创建XSSFWorkbook对象
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
//获取第一个工作表
XSSFSheet sheet = workbook.getSheetAt(0);
//遍历行和单元格
for (Row row : sheet) {
for (Cell cell : row) {
//读取单元格的值
String cellValue = cell.getStringCellValue();
System.out.print(cellValue + "\t");
}
System.out.println();
}
```
如果你需要写入Office 2007+ XML格式的文件,你也需要使用XSSF来创建工作簿和工作表,并使用XSSFCell来创建单元格。下面是一个简单的写入Excel文件的例子:
```java
//创建XSSFWorkbook对象
XSSFWorkbook workbook = new XSSFWorkbook();
//创建工作表
XSSFSheet sheet = workbook.createSheet("Sheet1");
//创建行和单元格并写入数据
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Hello World");
//将工作簿写入文件
FileOutputStream outputStream = new FileOutputStream("output.xlsx");
workbook.write(outputStream);
outputStream.close();
```
请注意,这两个例子中使用的是XSSF而不是HSSF。如果你使用的是HSSF,并且读取或写入Office 2007+ XML格式的文件,那么就会出现上述错误。
阅读全文