java poi 写入Excel后读取公式值问题
我用poi向excel中写入了一个值之后也重置了公式cell.setCellFormula(cell.getCellFormula);但是读取出来的值是0.0直接打开ex...
我用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 公式不能正常计算 展开
cell.setCellFormula(cell.getCellFormula);
但是读取出来的值是0.0 直接打开excel文件后公式才能正确计算
如果要换成jxl才能做到的话麻烦各个例子谢谢;
poi 用的 3.7
cell.setCellFormula("A1-B1-C1"); cell.setCellValue(123);
改公式和改值两种都试了 取值用的 cell.getNumbericCellValue();
读出来都是0.0 公式不能正常计算 展开
7个回答
推荐于2017-09-04 · 知道合伙人养生行家
关注
展开全部
1 package hrds.zpf.poi;
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 }
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 }
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好,我之前一直在研究poi和jxl,应该可以帮助你
“但是读取出来的值是0.0”,你说的这句话,是不是说,你用poi写了excel后,再读取excel时发现那个值是0.0?
“直接打开excel文件后公式才能正确计算”,这句话是不是说,直接打开excel文件后,双击那个你设置公式了但取值为0.0的单元格后,它又能用公式计算出正确的结果?
“但是读取出来的值是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再读取的麻烦
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sheet.setForceFormulaRecalculation(true);可以这样 强制使用公式 不需要保存!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我今天也遇到了这个问题,弄了半天,看API才找到了答案。
在你写入Excel之前,刷新一下这个工作表的公式就OK了。
HSSFFormulaEvaluator.evaluateAllFormulaCells(HSSFWorkbook workbook);
在你写入Excel之前,刷新一下这个工作表的公式就OK了。
HSSFFormulaEvaluator.evaluateAllFormulaCells(HSSFWorkbook workbook);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询