我的代码无效,它始终显示上述异常。 但我总能看到生成的tmp文件。
这是代码,有人可以建议一下:
FileInputStream fis =null;
try{
fis= new FileInputStream(new File("/home/amar/Desktop/new/abc.xls"));
Workbook wb = new org.apache.poi.xssf.usermodel.XSSFWorkbook(fis);
int numOfSheets = wb.getNumberOfSheets();
System.out.println("bhargo num of sheets is " + numOfSheets);
for(int i=0; i<numOfSheets; i++){
org.apache.poi.ss.usermodel.Sheet sheet = wb.getSheetAt(i);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext())
{
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = (Cell) cellIterator.next();
if (cell.getCellType() == cell.CELL_TYPE_STRING) {
System.out.println("bhargo cell value is " + cell.getStringCellValue().trim());
}
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
System.out.println("bhargo, closing the stream");
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:2)
这里有很多问题:
fis= new FileInputStream(new File("/home/amar/Desktop/new/abc.xls"));
Workbook wb = new org.apache.poi.xssf.usermodel.XSSFWorkbook(fis);
首先,as explained in the Apache POI documentation,如果您有文件,请不要使用InputStream!它更慢并且使用更多内存
其次,XSSF是使用.xlsx
文件的代码,但您的文件是.xls
文件,因此无效。
第三,Apache POI的代码会自动计算出你的文件类型,并为你创建合适的工作簿
因此,您的代码应该是
Workbook wb = WorkbookFactory.create(new File("/home/amar/Desktop/new/abc.xls"));
这将直接从文件
创建正确的工作簿答案 1 :(得分:1)
我能够解决我的问题。 我正在使用linux,因此它将文件保存在旧版本的excel中