CELL_TYPE_ERROR的用途是什么?

我想了解在apache poi中使用单元typesCELL_TYPE_ERROR。 我试了下面的代码,我没有看到错误。

Workbook wb = new XSSFWorkbook(); Row row = sheet1.createRow(0); Cell cell = row.createCell(0); cell.setCellType(Cell.CELL_TYPE_ERROR); cell.setCellValue(234); System.out.println("error cell value-"+ cell.getNumericCellValue()); //this prints 234.0 

此外,我想了解,如果单元格可以是typeserror如果我们不手动设置其types。

请参阅代码中的注释。

 import org.apache.poi.hssf.usermodel.*; import org.apache.poi.xssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import java.io.FileOutputStream; import java.io.FileNotFoundException; import java.io.IOException; class CellTypeErrorTest { public static void main(String[] args) { Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("Sheet1"); Row row = sheet.createRow(0); Cell cell = row.createCell(0); //The following works, but it makes no sense, because the cell will have no real content. //If you wants to see, how this will be shown into the Workbook, then comment out the //following code that overwrites the Cell with numeric content. cell.setCellType(Cell.CELL_TYPE_ERROR); cell.setCellErrorValue(FormulaError.DIV0.getCode()); System.out.println("error cell value-"+ FormulaError.forInt(cell.getErrorCellValue()).getString()); //If you put real content in the cell, then the CELL_TYPE_ERROR goes away, if the content //not produces ERROR. cell.setCellValue(234); System.out.println(cell.getCellType()); //0 == CELL_TYPE_NUMERIC //If you put a Formula in the Cell, it will not be evaluated automatically. //So there is no error, even the formula will produce error if it will be evaluated. cell = row.createCell(1); cell.setCellFormula("1/0"); System.out.println(cell.getCellType()); //2 == CELL_TYPE_FORMULA //It you need to check if a formula produces error, then you have to evaluate it. FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); CellValue cellValue = evaluator.evaluate(cell); System.out.println(cellValue.getCellType()); //5 == CELL_TYPE_ERROR if (cellValue.getCellType() == Cell.CELL_TYPE_ERROR) { System.out.println("error cell value-"+ FormulaError.forInt(cellValue.getErrorValue()).getString()); } try { FileOutputStream fileOut = new FileOutputStream("workbook.xlsx"); wb.write(fileOut); fileOut.close(); } catch (FileNotFoundException fnfex) { } catch (IOException ioex) { } } } 

结论:

Cell.CELL_TYPE_ERROR是检测单元格内容是否产生错误所必需的。 它大多是没有意义的,手动设置。

可以通过cell.setCellErrorValue将它手动设置为没有真正内容的单元格。 但是这大多是没有意义的,因为如果单元格获得真实内容并且这不会产生错误,那么CellType会自动更改为另一种types。

POI不会自动评估单元格公式。 具有公式的单元格的CellTypes是Cell.CELL_TYPE_FORMULA。 因此,要检查单元格公式是否产生错误,我们必须手动进行评估,然后检查评估的CellValue的CellType。 请参阅: http : //poi.apache.org/spreadsheet/eval.html

问候

阿克塞尔