繁体   English   中英

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

[英]Apache poi 3.10 cannot read .xlsx files, can read .xls files. why is that?

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格式。
有任何想法吗? 有人遇到过同样的问题并解决了吗?

嗯,这很奇怪......那段代码应该可以工作......我开始认为它与我正在使用的库有关,或者我没有正确指定一些东西使其工作,例如: Workbook workbook = new Workbook("C:\\\\book1.xlsx", loadOptions); ,或者有什么事情发生了..我知道它不起作用,因为它只是在XSSFSheet sheet = workbook.getSheetAt(0); 我的数组没有从 .xlsx 文件中获取值,加上一个简单的打印输出到控制台只是空的..但没有错误

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

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

女士们和先生们感谢您的时间和考虑,但我解决了这些问题。 和往常一样,我在这里出错了.. 问题是合乎逻辑的: fileName.contains(".xls")如果你使用 contains 而不是 contentEquals.. 这就是你得到的......当我试图加载一个.xlsx 文件,如您所见,if 语句是正确的...和繁荣... :) 好吧,这就是所有人! 2 小时这个..呵呵呵呵我喜欢它:)

根据您提到的逻辑,一旦找到“.xls”(在 .xls 和 .xlsx 文件扩展名中),您就找到了匹配项,因此 .xlsx 文件也与第一种情况匹配。 您可以首先从逻辑上检查 .xlsx,这自然会下降到 .xls 扩展名。 或者按照@Arve 的建议,让 POI 确定它为您找到的文件类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM