java poi 写入Excel后读取公式值问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java poi 写入Excel后读取公式值问题相关的知识,希望对你有一定的参考价值。
我用poi 向excel中写入了一个值 之后也重置了公式
cell.setCellFormula(cell.getCellFormula);
但是读取出来的值是0.0 直接打开excel文件后公式才能正确计算
如果要换成jxl才能做到的话麻烦各个例子谢谢;
poi 用的 3.7
cell.setCellFormula("A1-B1-C1"); cell.setCellValue(123);
改公式和改值两种都试了 取值用的 cell.getNumbericCellValue();
读出来都是0.0 公式不能正常计算
2
3 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
4 import org.apache.poi.hssf.usermodel.HSSFSheet;
5 import org.apache.poi.hssf.usermodel.HSSFRow;
6 import org.apache.poi.hssf.usermodel.HSSFCell;
7
8 import java.io.*;
9
10 public class FormulaToString
11
12 /**
13 * @param args
14 */
15 public void fileInput() throws IOException
16
17 HSSFWorkbook hw = new HSSFWorkbook(new FileInputStream(
18 "d:/My Documents/Desktop/poi.xls"));
19 HSSFSheet hsheet = hw.getSheet("poi test");
20 HSSFRow hrow = hsheet.getRow(0);
21 HSSFCell hcell = hrow.getCell(0);
22 String cellValue = this.getCellValue(hcell);
23 System.out.println(cellValue);
24
25
26
27 public String getCellValue(HSSFCell cell)
28 String value = null;
29 if (cell != null)
30 switch (cell.getCellType())
31 case HSSFCell.CELL_TYPE_FORMULA:
32 // cell.getCellFormula();
33 try
34 value = String.valueOf(cell.getNumericCellValue());
35 catch (IllegalStateException e)
36 value = String.valueOf(cell.getRichStringCellValue());
37
38 break;
39 case HSSFCell.CELL_TYPE_NUMERIC:
40 value = String.valueOf(cell.getNumericCellValue());
41 break;
42 case HSSFCell.CELL_TYPE_STRING:
43 value = String.valueOf(cell.getRichStringCellValue());
44 break;
45
46
47
48 return value;
49
50
51 public static void main(String[] args)
52 try
53 // TODO Auto-generated method stub
54 FormulaToString fts = new FormulaToString();
55 fts.fileInput();
56 catch (IOException e)
57 e.printStackTrace();
58
59
60
61 参考技术B 你好,我之前一直在研究poi和jxl,应该可以帮助你
“但是读取出来的值是0.0”,你说的这句话,是不是说,你用poi写了excel后,再读取excel时发现那个值是0.0?
“直接打开excel文件后公式才能正确计算”,这句话是不是说,直接打开excel文件后,双击那个你设置公式了但取值为0.0的单元格后,它又能用公式计算出正确的结果?追问
是的 我用poi写入excel后 并且重新设置了公式
再读取那个值就是0.0 (没有重设置公式也是0.0)
直接打开excel文件后 可以看到那个单元格的是显示的正确结果 不需要双击
但是不保存的话 再用poi读取出来的值还是0.0
我明白了,完整过程是这样,你看对不对:
用poi在内存中创建了一个workbook(自始至终没有写成文件),然后在某个单元格设置了公式,然后直接读取这个workbook发现,那个单元格取值并没有按照公式来
这个我还没有试过呢,我一般读写都会通过已保存的文件来处理,我现在试试,马上告诉你结果
---------------------------------------------------------------------------------------------------------
你好,试过了,不保存的话得到的结果一直是0.0,看来非得保存后再读取。
或者可能的话,你既然知道公式,就当然知道是哪些值的计算结果,直接在内存中计算出来,不一定非得通过excel公式,也省下了保存excel再读取的麻烦
不是这样
目前的操作是直接修改的现有文件(后面也会直接生成文件,我暂时还没去试),
比如C1=A1+B1 A1=10 B1=20 直接读取的话C1=30
然后我用poi修改了A1的值变成20 再取读取C1发现值没有变成40而是0.0
修改值 和 修改 公式我都试过了 都不能得到正确答案
因为公式是不固定的,我把公式存在数据库中 这样只要在前台修改数据那就可以直接得到想要的值了
麻烦你 再看下 谢谢
“然后我用poi修改了A1的值变成20 再取读取C1”
这个过程,有没有保存文件?在写入excel时直接获值只能是0.0。
所以如果用poi修改了任何内容,都必须先保存写成文件,否则直接从内存中获值不会是想要的。
另外,我刚才试了下jxl,不保存文件直接在内存中修改再读取也不会得到想要的值,必须先保存文件
写入数据后就 workbook.write(fileout); fileout.flush();fileout.close();
然后另一个类 新建workbook来调用这个文件 操作都是java完成的
直接用excel来打开文件可以看到值已经写进去了 但是读出来的话是0.0
你算说对了,我试验的结果一样,真是bug,我解决了告诉你
本回答被提问者采纳 参考技术C sheet.setForceFormulaRecalculation(true);可以这样 强制使用公式 不需要保存! 参考技术D 我今天也遇到了这个问题,弄了半天,看API才找到了答案。在你写入Excel之前,刷新一下这个工作表的公式就OK了。
HSSFFormulaEvaluator.evaluateAllFormulaCells(HSSFWorkbook workbook);
java poi读取excel含小数列时,与excel显示不一样
如下截图为excel显示值,而我后台java程序却解析到如下值:0.0290.031...0.0160.0130000000000000010.0310.0099999999999999980.0120.0099999999999999980.0130000000000000010.015就是有些列像使用了函数,自动四舍五入了。我也尝试改excel列为文本格式,但依然某些列解析会出现小数点后面还有很长一串字符。如果我再手动将excel某些列值手动输入,又可以正常解析不知各位大侠有没有碰到过这种情况,怎么解决呀?
以上是关于java poi 写入Excel后读取公式值问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 Apache POI 从 Java 中的 Excel 中读取公式字段
用java的poi类读取一个excel表格的内容后再写入到一个新excel表格中的完整代码