昨天运维给我发信息说通过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中公式不能自动计算出来的问题相关推荐

  1. 使用POI处理Excel中公式不能自动计算出来的问题

    使用POI导入了拥有公式的Excel模板后,发现其中原有公式单元格计算出来的值不能正常显示出来,需要重新刷新该公式后方可正常得出计算结果. 针对此问题,写了一个测试,代码如下: package cn. ...

  2. POI导出Excel,公式不能自动计算

    问题还原: 通过POI读取Excel内容后,需要根据读取内容中的key去数据库中查取对应的实时数据,计算之后,重新塞回到Excel对应的列中.这时计算公式中包含此列的单元格值按理应该是要改变,可是却没 ...

  3. 使用jxls,poi导出excel的公式中出现@符号,或者公式不生效

    问题描述 使用jxls,poi导出excel的公式中出现@符号,或者公式不生效(和office版本有关系) 模板excel公式 =MIN(IF(A11:T12>0,A11:T12))/A21 生 ...

  4. 关于EXCEL中公式复制后不自动计算的问题!

    前两天,教务处的梅梅姐,给我打电话,说自己的计算机可能中病毒了,EXCEL中公式复制后不能自动出结果,要在每个公式后,敲一下回车,才可以! 不然全是源单元格中的数据结果. 梅梅姐的机器,我是有所了解的 ...

  5. java通过poi读取excel中的日期类型数据或自定义类型日期

    java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 ...

  6. 如何使用Apache POI设置Excel的公式字段

    如何使用Apache POI设置Excel的公式字段 1. 概述 在本文中,我们将通过一个简单的示例来演示如何使用Apache POI在Microsoft Excel电子表格中设置公式字段 2. Ap ...

  7. 使用poi读取Excel中的数据到数据库

    大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 目录 大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 1.poi简单介绍 2.poi操作excel 3.代码部分(可 ...

  8. POI处理Excel中的日期数据类型

    在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理. 正确的处理方法是先判断单元格 的类型是否则NUMERIC类型, 然后再判断单元格是 ...

  9. stn算子_在 Excel 中,公式都是以 ____________ 开始的,后面由操作数和运算符构成。...

    [单选题]经典条件反射理论是()提出的 [单选题]本工程一层平面图中卫生间顶棚做法中大龙骨间距为( ) mm . [单选题]金代医家张子和治疗"卫德新之妻"一案中是( ) [阅读理 ...

最新文章

  1. Netty详解(三):Netty 入门应用
  2. 同步异步网络搜集到的比喻
  3. golang函数多值返回示例
  4. 乘法逆元总结 3种基本方法
  5. Redis保存Java Session
  6. 【译】谨慎使用CSS中的波浪选择器
  7. oracle模拟重叠事务,ORACLE的事务读一致性与语句读一致性
  8. Vuetable-2使用全纪录
  9. java ssh环境 eclipse_SSH在eclipse中环境搭建
  10. ASP.NET开发框架之HIPPO技术内幕(三)--数据库连接
  11. 两部手机怎样才能把数据都传过来_两个手机如何互传照片、文件 ,教你四大绝招...
  12. CodeForces - 1467C(枚举,思维)
  13. 智算时代里,浪潮存储的使命与担当
  14. 人工智能学习——神经网络(matlab+python实现)
  15. TCP/IP协议十二:关于MAC地址和IP地址在传输过程中变与不变的问题
  16. linuxoracle静默安装应答文件修改_Linux7静默安装Oracle11g教程,亲测实用有效!
  17. 【HNU分布式与云计算系统】MPI实现矩阵乘矩阵运算
  18. 刷脸支付助力互联网产业时代全面到来
  19. C语言 结构体数组复制
  20. Last-Modified 与 If-Modified-Since详解

热门文章

  1. java把小写变大写_用java实现人民币小写变大写的方法
  2. Python3三个简单练手小游戏
  3. 饼图指北(Pie Chart)
  4. mysql内存会持续上涨,每天增加一点,一直到100%
  5. Android LeakCanary使用详细教程
  6. 泵引理与证明语言非正则
  7. 系统开发建设要经过哪些流程?
  8. 【C基础】11 指针与数组
  9. 学习笔记-Hadamard矩阵的Kronecker积
  10. 微信页面模板基础知识汇总