gpt4 book ai didi

Java POI - 任何人都能够从公式单元格中提取数字?

转载 作者:行者123 更新时间:2023-11-29 06:48:09 24 4
gpt4 key购买 nike

我已经使用 Java POI 一段时间了,但是遇到了一个新问题,我想知道是否有人找到了解决方案。

阅读电子表格时,您需要知道单元格的类型才能使用正确的阅读方法。

因此您获取了单元格类型,然后调用适当的读取方法来获取单元格的内容。

这适用于除 FORMULA 单元格之外的所有单元格,其中值为数字。如果它是文本,你可以很好地阅读它。但是,如果结果值是一个数字,那么您从单元格中得到的只是一个空字符串。

我已经阅读了 POI 的 javadoc,并使用了正确的数据类型 (HSSFRichTextString),但仍然不满意。

谁有解决办法?

附言POI 的这种行为确实让我感到烦恼,因为应该有一个默认的 cell.toString() 方法可以返回任何单元格类型的字符串表示形式,比如默认为单元格的值属性。 (有点像您可以在其中选择“值”的特殊粘贴)。

PPS:按照要求 - 我正在使用 Java 6 (1.6.0_06) 和 poi-3.0.2-FINAL-20080204.jar

最佳答案

 FileInputStream fis = new FileInputStream("c:/temp/test.xls");
Workbook wb = new HSSFWorkbook(fis); //or new XSSFWorkbook("c:/temp/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());

CellValue cellValue = evaluator.evaluate(cell);

switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cellValue.getNumberValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cellValue.getStringValue());
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
break;

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

here 无耻地复制

关于Java POI - 任何人都能够从公式单元格中提取数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/527140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com