无效的标题签名 – 用Apache POI打开XLS

我想使用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它也显示我关于文件types(它说这是一个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中做“另存为”的评论,它可能会告诉格式是什么。 在我的情况下,这是一个制表符分隔的文件,所以我parsing它,而不使用Apache POI。 希望这可以帮助。