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);
得到堆栈而我的数组没有得到.xlsx文件的值,加上一个简单的打印输出到控制台只是空了。 。但没有错误
答案 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确定它为您找到的文件类型。