作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想了解单元格类型CELL_TYPE_ERROR在apache poi中的使用。我尝试了以下代码,没有看到错误。
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
此外,我想了解如果我们不手动设置单元格的类型,单元格是否可以为 error
类型。
最佳答案
查看代码中的注释。
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 会自动更改为另一种类型。
POI 不会自动计算单元格公式。带有公式的单元格类型始终为 Cell.CELL_TYPE_FORMULA。因此,要检查单元格公式是否产生错误,我们必须手动计算,然后检查计算的CellValue的CellType。请参阅:http://poi.apache.org/spreadsheet/eval.html
问候
阿克塞尔
关于java - CELL_TYPE_ERROR 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25951044/
我想了解单元格类型CELL_TYPE_ERROR在apache poi中的使用。我尝试了以下代码,没有看到错误。 Workbook wb = new XSSFWorkbook(); Row row =
我的 Java 应用程序读取 xls 文件并将其呈现在 JTable 上。到目前为止一切顺利。 当我尝试保存工作表时,我会迭代 JTable 中的 row、col 并: String str = (S
我是一名优秀的程序员,十分优秀!