[英]Is there any way to read both .xls and .xlsx files using Apache POI?
[英]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.