我正在尝试从 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 http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Cell.html#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);
}
}
}
请注意,迭代器仅给出文件中定义的单元格,因此如果单元格从未使用过,则会出现间隙。如果您需要获取每个单元格(包括丢失的单元格),请参阅迭代与获取文档 http://poi.apache.org/spreadsheet/quick-guide.html#Iterator
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)