我无法使用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 at org.apache.poi.openxml4j.opc.OPCPackage.getPart(OPCPackage.java:562) 在 org.apache.poi.POIXMLDocumentPart。(POIXMLDocumentPart.java:63) 在org.apache.poi.POIXMLDocument。(POIXMLDocument.java:58)at org.apache.poi.xssf.usermodel.XSSFWorkbook。(XSSFWorkbook.java:186) 在 com.covad.portlet.mars.util.ExcelReader.readExcel(ExcelReader.java:72)
答案 0 :(得分:5)
在确保将文件另存为之前,我遇到了此问题 ExcelWorkbook( .xlsx),如果您将文件另存为,则可能会出现此问题 严格打开XML SpreadSheet( .xlsx),它们都具有相同的扩展名,但内部结构可能不同,POI似乎不支持它;要解决文件上的问题,请将其再次保存为ExcelWorkbook(*。xlsx )。 我希望这可以解决你的问题。
答案 1 :(得分:0)
是的,上面的程序需要几个罐子作为poi-3.7.jar,poi-ooxml-3.7-20101029.jar,poi-ooxml-schemas-3.7-20101029.jar,xmlbeans-2.3.0.jar和dom4j- 1.6.1.jar。
另外,我正在尝试的输入文件有一些问题。我创建了新的空白文件并复制了我需要的所有数据,并尝试阅读相同的内容。它奏效了。
谢谢大家的时间和帮助。