【发布时间】:2016-02-01 10:50:49
【问题描述】:
我无法使用 java 读取 xlsx 文件,在我创建对象 XSSFWorkbook(fis) 的行中获取 Exception
HashMap<Short, String> keyMap = new HashMap<Short, String>();
HashMap<String, String> valueMap = null;
ArrayList<HashMap<String, String>> rowList = new ArrayList<HashMap<String, String>>();
try {
FileInputStream fis = new FileInputStream(fileName);
String fileExtn = getFileExtension(fileName);
Workbook xssfWorkBook ;
HSSFWorkbook hssfWorkBook ;
Sheet sheet=null;
if (fileExtn.equalsIgnoreCase("xlsx"))
{
log.debug("Before creating WorkBook");
xssfWorkBook = new XSSFWorkbook(fis);
log.debug("xssfWorkBook object created");
sheet = xssfWorkBook.getSheetAt(0);
}else if (fileExtn.equalsIgnoreCase("xls"))
{
hssfWorkBook = new HSSFWorkbook(fis);
sheet = (Sheet) hssfWorkBook.getSheetAt(0);
}
Iterator<Row> rows = sheet.rowIterator();
int rowCount = 0;
while (rows.hasNext()) {
if (rowCount == 0) {
Row row = rows.next();
Iterator<Cell> cells = row.cellIterator();
short cellCounter = 1;
while (cells.hasNext()) {
Cell cell = cells.next();
String cellValue = getCellValueAsString(cell);
keyMap.put(cellCounter, cellValue);
cellCounter++;
}
} else {
valueMap = new HashMap<String, String>();
Row row = rows.next();
Iterator<Cell> cells = row.cellIterator();
short cellCounter = 1;
while (cells.hasNext()) {
Cell cell = cells.next();
String cellValue = getCellValueAsString(cell);
valueMap.put(keyMap.get(cellCounter), cellValue);
cellCounter++;
}
rowList.add(valueMap);
}
rowCount++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
log.error("FileNotFoundException" + e);
throw new Exception("FileNotFoundException while reading Excel file, Message <" + e.getMessage() + ">");
} catch (IOException e) {
e.printStackTrace();
log.error("IOException" +e);
throw new Exception("IOException while reading Excel file, Message <" + e.getMessage() + ">");
}catch(Exception e){
e.printStackTrace();
throw new Exception("Exception while reading Excel file, Message <" + e.getMessage() + ">");
}
作为 stackTrace 获得以下异常是:
java.lang.NullPointerException 在 org.apache.poi.openxml4j.opc.OPCPackage.getPart(OPCPackage.java:562) 在 org.apache.poi.POIXMLDocumentPart.(POIXMLDocumentPart.java:63) 在 org.apache.poi.POIXMLDocument.(POIXMLDocument.java:58) 在 org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:186) 在 com.covad.portlet.mars.util.ExcelReader.readExcel(ExcelReader.java:72)
【问题讨论】:
-
如果您去找机械师并告诉他您的车无法启动并且是福特汽车,您认为这些信息足以让机械师修理您的汽车吗?
-
嗨,Petter,我检查了系统日志,发现它是 NullPointerException。下面是在 org.apache.poi.POIXMLDocumentPart.
(POIXMLDocumentPart.java: 63) 在 org.apache.poi.POIXMLDocument. (POIXMLDocument.java:58) 在 org.apache.poi.xssf.usermodel.XSSFWorkbook. (XSSFWorkbook.java:186) 在 com.covad.portlet .mars.util.ExcelReader.readExcel(ExcelReader.java:72) -
好吧,这比上面的错误有用得多......(被包装掉了)
-
对我来说,xlsx 文件似乎不是正确的 xlsx 文件,poi 无法读取它。尝试使用另一个 xlsx 文件
-
确保您也具有读取该文件的适当权限。还要考虑您使用 xls 而不是 xlsx的可能性。
标签: java jar apache-poi xlsx