我正在尝试使用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();
}
答案 0 :(得分:2)
遇到了类似的问题。即使文件扩展名为.xls,它也不是Excel文件!感谢此处的评论&#34; Save-As&#34;在Excel中,它可能会告诉您格式是什么。在我的例子中,它是一个制表符分隔的文件,所以我解析它而不使用Apache POI。希望这会有所帮助。