标题无效签名 - 与Apache POI打开XLS [英] Invalid Header Signature - Opening XLS with Apache POI
问题描述
我想一个XLS文件转换成使用Apache POI 3.9 Java中的CSV文件,但是我得到的一些问题。当尝试,我需要转换的文件,它让我看到以下错误:
java.io.IOException异常:无效头签名;阅读0x0010000000080209,预计0xE11AB1A1E011CFD0
在org.apache.poi.poifs.storage.HeaderBlock<&初始化GT;(HeaderBlock.java:140)
在org.apache.poi.poifs.storage.HeaderBlock<&初始化GT;(HeaderBlock.java:104)
在org.apache.poi.poifs.filesystem.POIFSFileSystem<&初始化GT;(POIFSFileSystem.java:138)
在ExtractExcelToCSV.convertExcelToCsv(ExtractExcelToCSV.java:26)
在ExtractExcelToCSV.main(ExtractExcelToCSV.java:60)
我觉得code我使用的是完全正确的(而且它也可以与其他文件)。我认为这个问题是XLS文件,因为当我尝试使用MS Excel打开它,它也表明了我一个关于文件类型(它说,这是一个的MS Excel工作表3)警告。有什么办法,我可以用POI打开这些文件?
公共静态无效convertExcelToCsv()抛出IOException
尝试{
cellGrid =新的ArrayList<名单,LT; HSSFCell>>();
的FileInputStream myInput =新的FileInputStream(D:\\\\ \\\\ ... filename.xls); POIFSFileSystem myFileSystem =新POIFSFileSystem(myInput);
HSSFWorkbook myWorkBook =新HSSFWorkbook(myFileSystem);
HSSFSheet MySheet的工作= myWorkBook.getSheetAt(0);
迭代器<> rowIter = mySheet.rowIterator(); 而(rowIter.hasNext()){
HSSFRow myRow =(HSSFRow)rowIter.next();
迭代器<> cellIter = myRow.cellIterator();
清单< HSSFCell> cellRowList =新的ArrayList< HSSFCell>();
而(cellIter.hasNext()){
HSSFCell了myCell =(HSSFCell)cellIter.next();
cellRowList.add(了myCell);
}
cellGrid.add(cellRowList);
}
}赶上(FileNotFoundException异常五){
e.printStackTrace();
}
有一个类似的问题。即使该文件扩展了.xls的,这不是一个Excel文件!由于这里在Excel做另存为的评论,它会告诉的格式是什么。就我而言,这是一个制表符分隔的文件,这样我就分析不使用Apache POI。希望这有助于。
I'm trying to convert a XLS file into a CSV file in java using Apache POI 3.9, however I'm getting some issues. When trying to convert the file I need to, it shows me the following error:
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)
I think the code I'm using is completely correct (and it also works with other files). I think the problem is on XLS file because when I try to open it using MS Excel it also shows me a warning about the file type (it says it is a MS Excel 3 Worksheet). Is there any way I can open these files using 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();
}
Got a similar issue. Even if the file had extension .xls, it was NOT an Excel file! Thanks to the comment here of doing "Save-As" in Excel, it might tell what the format is. In my case it was a tab-delimited file so I parsed it without using Apache POI. Hope this helps.
这篇关于标题无效签名 - 与Apache POI打开XLS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!