Apache poi 3.10无法读取.xlsx文件,可以读取.xls文件。这是为什么?

时间:2014-08-11 12:11:50

标签: java excel apache-poi

FileInputStream fis = null; //this will be used to read the excel file
fis = new FileInputStream(excelFile);
int numOfExcelRows = 0;

//create an excel workbook from the file system and check if is .xls or xlsx
Iterator<Row> rowIterator = null;
if (fileName.contains(".xls")){
    HSSFWorkbook workbook = new HSSFWorkbook(fis);
    HSSFSheet sheet = workbook.getSheetAt(0);
    rowIterator = sheet.iterator();
    numOfExcelRows = sheet.getLastRowNum();
}
else{        
    if (fileName.contains(".xlsx")){
    XSSFWorkbook workbook = new XSSFWorkbook(fis);
    XSSFSheet sheet = workbook.getSheetAt(0);
    rowIterator = sheet.iterator();
    numOfExcelRows = sheet.getLastRowNum();
}

这里的问题完全相同。这段代码应该可行。它确实如此,但对于.xls个文件而不是.xlsx个文件。没有产生错误,没有异常,试图保存为不同的.xlsx格式 有任何想法吗? 有人有同样的问题并解决了吗?

好吧,这是奇怪的事情..那段代码应该工作...我开始认为它与我正在使用的库的东西要么我没有正确指定它的工作,如:{{1}我知道它不起作用,因为它只是在Workbook workbook = new Workbook("C:\\book1.xlsx", loadOptions);得到堆栈而我的数组没有得到.xlsx文件的值,加上一个简单的打印输出到控制台只是空了。 。但没有错误

3 个答案:

答案 0 :(得分:1)

改为使用WorkbookFactory,让POI选择正确的格式。

请参阅http://poi.apache.org/spreadsheet/quick-guide.html#ReadWriteWorkbook

答案 1 :(得分:0)

女士和男士们感谢您的时间和考虑,但我解决了这些问题。 像往常一样,我在这里是错误的..问题是合乎逻辑的:fileName.contains(".xls")如果你使用contains而不是contentEquals那么...这就是你得到的...当我试图加载.xlsx文件时你可以看到if语句是真的......并且繁荣...... :)那就是所有人!这个2个小时..呵呵呵我爱它:)。

答案 2 :(得分:0)

根据您提到的逻辑,一旦找到&#34; .xls&#34; (在.xls和.xlsx文件扩展名中),您找到了匹配项,因此.xlsx文件也匹配第一个案例。您可以先在逻辑上检查.xlsx,这会自然地降低到.xls扩展名。或者@Arve建议,让POI确定它为您找到的文件类型。