gpt4 book ai didi

java - 如何使用 apache poi 从公式单元格中读取单元格值

转载 作者:搜寻专家 更新时间:2023-11-01 01:13:18 24 4
gpt4 key购买 nike

我正在尝试从 excel 文件中读取所有数据,该文件也有一些公式单元格,但我不知道哪个单元格是公式单元格。无论单元格的类型如何,我如何从单元格中读取所有值。

我的代码是这样的

FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
while (rows.hasNext()) {
row = (HSSFRow) rows.next();
Iterator cells = row.cellIterator();
while (cells.hasNext()) {
cell = (HSSFCell) cells.next();
if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
ar.add(cell.getStringCellValue());
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
ar.add(cell.getNumericCellValue());
}else if (cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA) {
ar.add(evaluator.evaluateFormulaCell(cell));
} else {
ar.add("");
}
}
}

我得到的公式单元格值为 0

最佳答案

您要找的方法是Cell.getCachedFormulaResultType - 对于会告诉您公式结果类型的公式单元格

你的代码可以是这样的:

private void handleCell(int type, Cell cell) {
if (type == HSSFCell.CELL_TYPE_STRING) {
ar.add(cell.getStringCellValue());
} else if (type == HSSFCell.CELL_TYPE_NUMERIC) {
ar.add(cell.getNumericCellValue());
} else if (type == HSSFCell.CELL_TYPE_BOOLEAN) {
ar.add(cell.getBooleanCellValue());
} else if (type == HSSFCell.CELL_TYPE_FORMULA) {
// Re-run based on the formula type
handleCell(cell.getCachedFormulaResultType(), cell);
} else {
ar.add("");
}
}

public void handleSheet(Sheet sheet) {
for (Row row : sheet) {
for (Cell cell : row) {
handleCell(cell.getCellType(), cell);
}
}
}

请注意,迭代器仅提供文件中定义的单元格,因此如果从未使用过单元格,就会出现间隙。如果您需要获取每个单元格(包括缺失的单元格),请参阅 Iterating vs Fetching docs

关于java - 如何使用 apache poi 从公式单元格中读取单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17510112/

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