xssf如何获取任何东西作为string

我尝试使用apache poi xssf将excel文件parsing为XML。 现在有一个单元格,不知道里面有什么,我只想从中得到一个string。 但是当我使用

cell.getStringCellValue() 

它抛出一个exception,这是不是很令人惊讶,因为它是这样logging的。 所以我通过检查天气是一个数字或文本单元格来build立我的方式。 但如何处理公式单元格。 他们可能包含数字

 = A2 + B2 

什么给我总和(例如4)或对另一个文本的引用

 = C2 

什么可能引用像“汉斯”的文字。

我怎么能知道我的单元格是什么,以及如何从中得到一个string?

Excel将一些单元格存储为string,但大多数情况下将数字应用于特殊的格式规则。 如果你想得到原始值,使用基于cell.getCellType()的switch语句,如其他答案所示。

但是,如果你想要的是一个单元格的string,显示与Excel将显示相同的基于单元格+单元格types的所有格式化规则,那么Apache POI有一个类来做到这一点 – DataFormatter

你所需要做的就是:

  Workbook wb = WorkbookFactory.create(new File("myfile.xls")); DataFormatter df = new DataFormatter(); Sheet s = wb.getSheetAt(0); Row r1 = s.getRow(0); Cell cA1 = r1.getCell(0); String asItLooksInExcel = df.formatCellValue(cA1); 

无论单元格types如何,DataFormatter都会尽可能地为您设置格式,并使用Excel中应用的规则,并在最后为您提供格式良好的string。

您可以在CELLtypes上添加如下所示的检查:

 switch(cell.getCellType()) { case Cell.CELL_TYPE_BOOLEAN: System.out.print(cell.getBooleanCellValue() + "\t\t"); break; case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue() + "\t\t"); break; case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue() + "\t\t"); break; } 

试试这个

  case Cell.CELL_TYPE_FORMULA: switch (cell.getCachedFormulaResultType()) { case Cell.CELL_TYPE_STRING: System.out.println(cell.getRichStringCellValue().getString()); break; case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { System.out.println(cell.getDateCellValue() + ""); } else { System.out.println(cell.getNumericCellValue()); } break; } break; 

加重的答案不适用于公式单元格(在结果string中,您会得到公式,而不是公式的结果)。 以下是在任何情况下对我有用的东西:

 final XSSFWorkbook workbook = new XSSFWorkbook(file); final DataFormatter dataFormatter = new DataFormatter(); final FormulaEvaluator objFormulaEvaluator = new XSSFFormulaEvaluator(workbook); final Cell cell = ...; objFormulaEvaluator.evaluate(cell); final String cellValue = dataFormatter.formatCellValue(cell, objFormulaEvaluator);