Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单元格类型错误的用途是什么?_Java_Excel_Apache Poi - Fatal编程技术网

Java 单元格类型错误的用途是什么?

Java 单元格类型错误的用途是什么?,java,excel,apache-poi,Java,Excel,Apache Poi,我想了解在ApachePOI中使用cell-type-cell\u-type\u-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("err

我想了解在ApachePOI中使用cell-type-cell\u-type\u-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

另外,我想了解如果不手动设置单元格的类型,该单元格的类型是否可以是
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_错误是检测单元格内容是否产生错误所必需的。手动设置它几乎毫无意义

可以使用cell.setCellErrorValue手动将其设置为没有实际内容的单元格。但这几乎毫无意义,因为如果单元格获得真实内容,并且不会产生错误,那么单元格类型将自动更改为另一种类型

POI不会自动计算单元格公式。具有公式的单元格类型为ever Cell.Cell\u TYPE\u FORMULA。因此,要检查单元格公式是否产生错误,我们必须手动求值,然后检查求值单元格值的单元格类型。见:

问候


Axel

您是否尝试将工作簿写入文件并使用Excel或Libre-/OpenOffice打开它?我的猜测是,如果有的话,手动将单元格类型设置为error将在那里可见。除此之外,我认为其目的是可以通过编程检查计算错误。例如,如果excel工作表中的单元格公式为6/0,则该单元格应为公式单元格。如果随后复制此单元格并粘贴其值,则应该有一个错误单元格(任何其他单元格类型在此处都不适用。我尝试将工作簿写入带有错误单元格的文件,并使用excel打开它。错误单元格不会导致任何问题。此外,我创建了一个公式
=1/0
,并复制了该单元格,新创建的单元格类型再次是公式。感谢您的回答。因此,如果我理解正确,只有当我们手动将单元格类型设置为“error”时,并且在少数情况下,我们计算产生错误的公式时,单元格类型才是错误。此外,对于不使用POI创建的工作簿,此单元格类型是否有任何意义?我认为此单元格类型仅在apche POI api的上下文中有用。嗯,不,我的结论与您的结论相反。我我已经把我的结论写进了我的答案。谢谢你澄清这一点!