gpt4 book ai didi

java - 标题签名无效 - 使用 Apache POI 打开 XLS

转载 作者:行者123 更新时间:2023-11-30 09:15:10 25 4
gpt4 key购买 nike

我正在尝试使用 Apache POI 3.9 将 XLS 文件转换为 Java 中的 CSV 文件,但是我遇到了一些问题。当尝试转换我需要的文件时,它显示以下错误:

java.io.IOException: Invalid header signature; read 0x0010000000080209, expected 0xE11AB1A1E011CFD0
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:140)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:104)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:138)
at ExtractExcelToCSV.convertExcelToCsv(ExtractExcelToCSV.java:26)
at ExtractExcelToCSV.main(ExtractExcelToCSV.java:60)

我认为我使用的代码是完全正确的(并且它也适用于其他文件)。我认为问题出在 XLS 文件上,因为当我尝试使用 MS Excel 打开它时,它还会向我显示有关文件类型的警告(它说它是 MS Excel 3 工作表)。有什么方法可以使用 POI 打开这些文件吗?

public static void convertExcelToCsv() throws IOException {
try {
cellGrid = new ArrayList<List<HSSFCell>>();
FileInputStream myInput = new FileInputStream("D:\\...\\filename.xls");



POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem);
HSSFSheet mySheet = myWorkBook.getSheetAt(0);
Iterator<?> rowIter = mySheet.rowIterator();

while (rowIter.hasNext()) {
HSSFRow myRow = (HSSFRow) rowIter.next();
Iterator<?> cellIter = myRow.cellIterator();
List<HSSFCell> cellRowList = new ArrayList<HSSFCell>();
while (cellIter.hasNext()) {
HSSFCell myCell = (HSSFCell) cellIter.next();
cellRowList.add(myCell);
}
cellGrid.add(cellRowList);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}

最佳答案

遇到了类似的问题。即使文件的扩展名为 .xls,它也不是 Excel 文件!感谢此处关于在 Excel 中执行“另存为”的评论,它可能会告诉您格式是什么。在我的例子中,它是一个制表符分隔的文件,所以我在不使用 Apache POI 的情况下解析了它。希望这会有所帮助。

关于java - 标题签名无效 - 使用 Apache POI 打开 XLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20053350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com