Excel单元格中公式和结果的互相转化Evaluate和Get.cell

           一、已知计算式,计算计算式的值方法(假如计算式在C2):
                  1、选中d2,菜单:插入/名称/定义,在对话框中的“在当前工作薄中的名称”处输入一个名称,比如jg(随便输入),在“引用位置”处输入=evaluate(c2),确定。
                  2、在d2中输入=jg,即可,然后下拉复制,就可以在d2这一列中计算出c2的这一列的值。

           二、已知公式的计算结果,显示公式的方法(假如公式在c2):
                  1、选中d2,菜单:插入/名称/定义,在对话框中的“在当前工作薄中的名称”处输入一个名称,比如gs(随便输入),在“引用位置”处输入=get.cell(6,c2),确定。
                  2、在d2中输入=gs,即可,然后下拉复制,就可以在d2这一列中计算出c2的这一列的计算公式。

-------------------------------------------------------------------------------------------------------------------------------------

Evaluate

只用于宏表
对以文字表示的一个公式或表达式求值,并返回结果。若要运行宏或子例程,请使用 RUN 函数。

语法

EVALUATE(formula_text)
Formula_text    是一个要求值的以文字形式表示的表达式。

使用EVALUATE类似于在编辑栏的公式内选定一个表达式并按下了[重新计算]键(在Microsoft Excel for Windows 中是F9)。

-------------------------------------------------------------------------------------------------------------------------------

Get.cell

Get.cell用于获取制定单元格或单元格区域的属性,格式为:GET.CELL(类型值,引用区域)

类型值的含义

类型值说明GET.CELL返回值举例
1引用区域中左上方单元格的绝对地址$E$5
2引用区域中最上方单元格的行号5
3引用区域中最左边的单元格行号5
4单元格数值的类型:2
1=数值
2=文本
4=逻辑值
16=错误信息
64=数组 
5单元格的内容 
6单元格的公式 
7数据格式G/通用格式
8水平对齐方式7
1=常规
2=靠左
3=居中
4=靠右
5=填充
6=两端对齐
7=跨列居中
9左边线类型: 
0=无边线 
1=细线 
2=中等线 
3=虚线 
4=点状线 
5=粗线 
6=双线 
7=长短线 
10右边线类型(同上)0
11上边线类型(同上)1
12下边线类型(同上)0
13用数字0--18表示图案,0表示无颜色1
14表示是否锁定TRUE
15表示是否隐藏FALSE
17POINTS表示单元格的行高80.25
18字体名称Arial
19字体大小8
20是否加粗TRUE
21是否斜体FALSE
22是否加下划线FALSE
24文字颜色1
25是否加外边框FALSE
26是否为阴影FALSE
27手动分页符:0
0=无分页符
1=
2=
3=行和列
30是否有行汇总FALSE
31是否有列汇总FALSE
32该单元格所在的文件名称 
34左边线颜色0
35右边线颜色0
36上边线颜色0
37下边线颜色0
38前景阴影颜色35
39背景阴影颜色0
40样式常规
42单元格左边界距当前工作表左边界水平距离(单位:POINTS)538
43单元格上边界距当前工作表上边界的水平距离63.25
44单元格左边界距当前工作表左边界的水平距离582.25
45单元格下边界距当前工作表下边界的水平距离143.5
46是否有批注FALSE
48是否有公式TRUE
48是否为数组的一部分FALSE
### 如何在Java中通过Apache POI读取Excel单元格中的公式计算数值 在处理Excel文件时,如果需要读取包含公式单元格并获取其计算后的数值,可以使用Apache POI库中的`cell.getNumericCellValue()`方法。此方法适用于已由Excel计算过的公式单元格[^1]。 以下是实现这一功能的具体代码示例: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream; import java.io.IOException; public class ReadFormulaValueExample { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("example.xlsx"); Workbook workbook = new XSSFWorkbook(fis); Sheet sheet = workbook.getSheetAt(0); Row row = sheet.getRow(3); // 假设目标数据位于第4行(索引从0开始) Cell cell = row.getCell(1); // 获取第二列的单元格 if (cell.getCellType() == CellType.FORMULA) { try { double numericCellValue = cell.getNumericCellValue(); System.out.println("The result of the formula is: " + numericCellValue); } catch (IllegalStateException e) { FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); CellValue cellValue = evaluator.evaluate(cell); switch (cellValue.getCellTypeEnum()) { case STRING: System.out.println("Result as string: " + cellValue.getStringValue()); break; case NUMERIC: System.out.println("Result as number: " + cellValue.getNumberValue()); break; default: System.out.println("Unexpected type encountered."); } } } workbook.close(); fis.close(); } } ``` 上述代码展示了如何打开一个`.xlsx`文件,并从中提取特定位置上的单元格值。当遇到公式类型的单元格时,优先尝试调用`getNumericCellValue()`以直接获得计算结果;如果失败,则创建一个`FormulaEvaluator`对象来评估该公式[^2]。 需要注意的是,在某些情况下,尤其是当Excel文档未保存最后的状态或者手动输入了未经重新计算的公式时,可能无法立即得到期望的结果。此时应依赖于`FormulaEvaluator`完成动态求解过程[^3]。 #### 注意事项 - `getNumericCellValue()`仅能用于已经过计算的公式单元格。 - 如果试图访问尚未被计算或不支持返回数字值的公式单元格,可能会抛出异常。 - 对于复杂场景下的公式解析与执行,推荐始终采用`FormulaEvaluator`作为备用方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值