POI处理Excel中公式不能自动计算出来的问题
昨天运维给我发信息说通过Excel导入信息集报错,我一脸迷茫~因为我在本地测试毫无问题
于是喊她把她需要导入的Excel发给我看看,一看果然是跟我操作不一样的。
她们在计算合计时是通过excel公式计算的,而我本地是直接输入的。这就导致了一个问题的出现。
获取到的值为null,我不能通过常规方法获取公式计算出来的值。
在经过网上一番查找答案之后,终于找到了一个简单高效的方法。
新增了一个方法
//转换公式导致为空问题
private Double formulaTranslation(HSSFWorkbook wb, HSSFRow hssfRow, Double cell) {if (null==cell) {HSSFFormulaEvaluator hssfFormulaEvaluator =new HSSFFormulaEvaluator(wb);CellValue cellValue = hssfFormulaEvaluator.evaluate(hssfRow.getCell(9));cell = cellValue.getNumberValue();}return cell;}
关键就在于这里:
Poi中提供了org.apache.poi.ss.usermodel.FormulaEvaluator这个接口,实现对公式的更新。其中HSSFFormulaEvaluator, XSSFFormulaEvaluator 实现了这个接口。通过构造方法可以得到一个HSSFFormulaEvaluator的实例。
HSSFFormulaEvaluator eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);
FormulaEvaluator提供了evaluateFormulaCell(Cell cell)方法,计算公式保存结果,但不改变公式。而evaluateInCell(Cell cell) 方法是计算公式,并将原公式替换为计算结果,也就是说该单元格的类型不在是Cell.CELL_TYPE_FORMULA而是Cell.CELL_TYPE_NUMBERIC。
HSSFFormulaEvaluator提供了静态方法evaluateAllFormulaCells(HSSFWorkbook wb) ,计算一个Excel文件的所有公式,用起来很方便。下面例子是提供公式更新的一个方法,传入Workbook,Sheet和行下标row,然后更新相应行的所有公式。
private static void updateFormula(Workbook wb,Sheet s,int row){Row r=s.getRow(row);Cell c=null;FormulaEcaluator eval=null;if(wb instanceof HSSFWorkbook)eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);else if(wb instanceof XSSFWorkbook)eval=new XSSFFormulaEvaluator((XSSFWorkbook) wb);for(int i=r.getFirstCellNum();i<r.getLastCellNum();i++){c=r.getCell(i);if(c.getCellType()==Cell.CELL_TYPE_FORMULA)eval.evaluateFormulaCell(c);}}
POI处理Excel中公式不能自动计算出来的问题相关推荐
- 使用POI处理Excel中公式不能自动计算出来的问题
使用POI导入了拥有公式的Excel模板后,发现其中原有公式单元格计算出来的值不能正常显示出来,需要重新刷新该公式后方可正常得出计算结果. 针对此问题,写了一个测试,代码如下: package cn. ...
- POI导出Excel,公式不能自动计算
问题还原: 通过POI读取Excel内容后,需要根据读取内容中的key去数据库中查取对应的实时数据,计算之后,重新塞回到Excel对应的列中.这时计算公式中包含此列的单元格值按理应该是要改变,可是却没 ...
- 使用jxls,poi导出excel的公式中出现@符号,或者公式不生效
问题描述 使用jxls,poi导出excel的公式中出现@符号,或者公式不生效(和office版本有关系) 模板excel公式 =MIN(IF(A11:T12>0,A11:T12))/A21 生 ...
- 关于EXCEL中公式复制后不自动计算的问题!
前两天,教务处的梅梅姐,给我打电话,说自己的计算机可能中病毒了,EXCEL中公式复制后不能自动出结果,要在每个公式后,敲一下回车,才可以! 不然全是源单元格中的数据结果. 梅梅姐的机器,我是有所了解的 ...
- java通过poi读取excel中的日期类型数据或自定义类型日期
java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2019,而Excel中输入的是 2019/10/12 ...
- 如何使用Apache POI设置Excel的公式字段
如何使用Apache POI设置Excel的公式字段 1. 概述 在本文中,我们将通过一个简单的示例来演示如何使用Apache POI在Microsoft Excel电子表格中设置公式字段 2. Ap ...
- 使用poi读取Excel中的数据到数据库
大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 目录 大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 1.poi简单介绍 2.poi操作excel 3.代码部分(可 ...
- POI处理Excel中的日期数据类型
在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理. 正确的处理方法是先判断单元格 的类型是否则NUMERIC类型, 然后再判断单元格是 ...
- stn算子_在 Excel 中,公式都是以 ____________ 开始的,后面由操作数和运算符构成。...
[单选题]经典条件反射理论是()提出的 [单选题]本工程一层平面图中卫生间顶棚做法中大龙骨间距为( ) mm . [单选题]金代医家张子和治疗"卫德新之妻"一案中是( ) [阅读理 ...
最新文章
- Netty详解(三):Netty 入门应用
- 同步异步网络搜集到的比喻
- golang函数多值返回示例
- 乘法逆元总结 3种基本方法
- Redis保存Java Session
- 【译】谨慎使用CSS中的波浪选择器
- oracle模拟重叠事务,ORACLE的事务读一致性与语句读一致性
- Vuetable-2使用全纪录
- java ssh环境 eclipse_SSH在eclipse中环境搭建
- ASP.NET开发框架之HIPPO技术内幕(三)--数据库连接
- 两部手机怎样才能把数据都传过来_两个手机如何互传照片、文件 ,教你四大绝招...
- CodeForces - 1467C(枚举,思维)
- 智算时代里,浪潮存储的使命与担当
- 人工智能学习——神经网络(matlab+python实现)
- TCP/IP协议十二:关于MAC地址和IP地址在传输过程中变与不变的问题
- linuxoracle静默安装应答文件修改_Linux7静默安装Oracle11g教程,亲测实用有效!
- 【HNU分布式与云计算系统】MPI实现矩阵乘矩阵运算
- 刷脸支付助力互联网产业时代全面到来
- C语言 结构体数组复制
- Last-Modified 与 If-Modified-Since详解