当前位置: 首页 > 面试题库 >

使用Apache Poi从Excel工作表中获取单元格值

郭业
2023-03-14
问题内容

如何在Java中使用poi获取单元格值?

我的代码看起来像这样

String cellformula_total__percentage= "(1-E" + (rowIndex + 2) + "/" + "D" + (rowIndex + 2) + ")*100";
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellStyle(this.valueRightAlignStyleLightBlueBackground);
cell.setCellFormula("abs(" + cellformula_total__percentage + ")");

但是,如果在这种情况下,我如何检查我的单元格值是否包含错误值,例如#DIV / 0!以及如何用N / A替换它


问题答案:

您必须使用FormulaEvaluator,如图所示这里。如果单元格包含这样的公式,它将返回一个值,该值要么是单元格中存在的值,要么是公式的结果:

FileInputStream fis = new FileInputStream("/somepath/test.xls");
Workbook wb = new HSSFWorkbook(fis); //or new XSSFWorkbook("/somepath/test.xls")
Sheet sheet = wb.getSheetAt(0);
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();

// suppose your formula is in B3
CellReference cellReference = new CellReference("B3"); 
Row row = sheet.getRow(cellReference.getRow());
Cell cell = row.getCell(cellReference.getCol());

if (cell!=null) {
    switch (evaluator.evaluateFormulaCell(cell)) {
        case Cell.CELL_TYPE_BOOLEAN:
            System.out.println(cell.getBooleanCellValue());
            break;
        case Cell.CELL_TYPE_NUMERIC:
            System.out.println(cell.getNumericCellValue());
            break;
        case Cell.CELL_TYPE_STRING:
            System.out.println(cell.getStringCellValue());
            break;
        case Cell.CELL_TYPE_BLANK:
            break;
        case Cell.CELL_TYPE_ERROR:
            System.out.println(cell.getErrorCellValue());
            break;

        // CELL_TYPE_FORMULA will never occur
        case Cell.CELL_TYPE_FORMULA: 
            break;
    }
}

如果您需要精确的内容(例如,如果单元格包含公式,则为formla),则在此处显示。

编辑: 添加了一些示例来帮助您。

首先,您获得了单元格(仅作为示例)

Row row = sheet.getRow(rowIndex+2);    
Cell cell = row.getCell(1);

如果您只想使用公式将值设置到单元格中(不知道结果):

 String formula ="ABS((1-E"+(rowIndex + 2)+"/D"+(rowIndex + 2)+")*100)";    
 cell.setCellFormula(formula);    
 cell.setCellStyle(this.valueRightAlignStyleLightBlueBackground);

如果您想在单元格中出现错误时更改消息,则必须更改公式,例如

IF(ISERR(ABS((1-E3/D3)*100));"N/A"; ABS((1-E3/D3)*100))

(此公式检查评估是否返回错误,然后显示字符串“ N / A”,或者如果评估不是错误,则显示评估)。

如果要获取与公式对应的值,则必须使用评估器。

希望能有所帮助,
纪尧姆



 类似资料:
  • 在Java中,我应该得到的输出是

  • 问题内容: 我必须将 算法从Excel工作表移植到python代码, 但必须对 Excel文件中的算法 进行 反向工程 。 Excel工作表非常复杂,它包含许多单元格,在这些单元格中有引用其他单元格的公式(也可以包含公式或常数)。 我的想法是使用python脚本分析工作表,以构建一种单元格之间的依存关系表,即: A1取决于B4,C5,E7公式:“ = sqrt(B4)+ C5 * E7” A2取决

  • 有人知道从工作簿中的每个工作表中提取某个单元格值的命令吗?或者我可以写一个简单的宏?

  • 问题内容: 我正在使用apache POI读取Excel文档。至少可以说,到目前为止,它已经可以满足我的目的。但是令我震惊的一件事是将单元格的值提取为HTML。 我有一个单元格,用户将在其中输入一些字符串并应用某种 格式(例如,项目符号/数字/粗体/斜体) 等。 因此,当我阅读它时,内容应为 HTML 格式,而不是POI给出的纯字符串格式。 我几乎遍历了整个POI API,但找不到任何人。我只想保

  • 我想完全读取Excel表并使用AJAX将每一行发送到另一个页面进行处理。所以我使用了以下代码将excel表数据转换为JSON数组(库中提供的参考PHPExcel示例): 这里是上传文件的位置,要读取该位置以使用AJAX将行单独发送到另一个页面。我在javascript中使用作为 但是excel工作表包含一些合并单元格,因此PHPExcel无法读取这些合并单元格中的值。因此,这些单元格中的值被读取为

  • 我无法使用java代码从excel单元格中获取逗号分隔的值。 我也尝试过使用以下代码。 我希望输出为如下列表: 当输入从 Excel 单元格导入为印度,巴基斯坦,美国,澳大利亚。