POI从公式单元中获取数据值踩的坑

问题:从Excel读取数据时,通过断点调试发现cell.setCellType(CellType.STRING)执行很慢。排查API发现有如下提示:

如果是为了从公式单元格中获取数值类型的值,API明确提示不要用setCellType,应该用DataFormatter。

 

POI库提供了计算公式的功能,可以通过公式器计算单元格包含的公式的结果。下面是一个Java代码示例,可以使用POI库来获取公式计算后的: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.*; import org.apache.poi.xssf.usermodel.*; import java.io.File; import java.io.FileInputStream; public class PoiFormulaEvaluatorExample { public static void main(String[] args) throws Exception { // 读取Excel文件 File file = new File("example.xlsx"); FileInputStream inputStream = new FileInputStream(file); XSSFWorkbook workbook = new XSSFWorkbook(inputStream); XSSFSheet sheet = workbook.getSheetAt(0); // 获取第一行第一列单元格 CellReference cellReference = new CellReference("A1"); XSSFRow row = sheet.getRow(cellReference.getRow()); XSSFCell cell = row.getCell(cellReference.getCol()); // 获取公式计算器 FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); // 计算公式的结果 CellValue cellValue = evaluator.evaluate(cell); // 获取计算后的 double value = cellValue.getNumberValue(); System.out.println("计算后的为: " + value); // 关闭Excel文件 workbook.close(); inputStream.close(); } } ``` 在这个例子,我们假设我们要获取第一行第一列单元格。我们首先使用 `CellReference` 类来获取这个单元格的引用,然后使用 `XSSFRow` 和 `XSSFCell` 类获取这个单元格。接下来,我们使用 `XSSFWorkbook` 类读取Excel文件,并使用 `FormulaEvaluator` 获取公式计算器。最后,我们使用 `evaluate` 方法计算单元格公式的结果,并使用 `CellValue` 类获取计算后的。 请注意,上述代码仅适用于使用XSSF格式的Excel文件。如果您使用的是HSSF格式的Excel文件,则需要使用 `HSSFWorkbook` 和 `HSSFCell` 类来获取单元格,并使用 `HSSFFormulaEvaluator` 类获取公式计算器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值