excle 如何判断指定单元格的公式已经计算完成 【已解决】
本帖最后由 fenhanxue 于 2017-5-27 10:24 编辑#cs
Excel 表中,有A1 B1 C1 D1 四个单元格
其中,A1 B1 C1 是自变量,需要手动输入
D1 是因变量,已经写好了公式,如 D1 =A1+B1*C1
那么,我手动输入A1 B1 C1 后,D1 会自动显示结果,如继续以 D1 =A1+B1*C1为例子,
假设输入 A1= 1B1= 2 C1= 3
那么 D1 就会显示7(1+2*3)
上述过程,要得到D1,可以这样实现:
#ce
#include <Excel.au3>
Local $oExcel = _ExcelBookOpen(@ScriptDir &'\公式模板.xlsx') ;创建新工作簿, 并使其可见
Local $a1 = 1
Local $b1 = 2
Local $c1 = 3
_ExcelWriteCell($oExcel, $a1, 1, 1) ;写入内容到单元格A1
_ExcelWriteCell($oExcel, $b1, 1, 2) ;写入内容到单元格B1
_ExcelWriteCell($oExcel, $c1, 1, 3) ;写入内容到单元格C1
MsgBox(0,'D1的最终结果为:',_ExcelReadCell($oExcel,1,4))
;====================================================那么我的问题是
我上面D1的公式非常简单,excel计算结果耗时应该是非常短的。那么上述代码应该没问题。
那么,假设D1 的公式是一个非常非常非常非常复杂非常非常非常耗时的公式,如可能要耗费10分钟才能计算出结果。那么上述代码是否就会有问题,是否应该加一个判断:
即判断D1是否已经完成了计算。
那么这个判断应该怎么写呢?
即:
#include <Excel.au3>
Local $oExcel = _ExcelBookOpen(@ScriptDir &'\公式模板.xlsx') ;创建新工作簿, 并使其可见
Local $a1 = 1
Local $b1 = 2
Local $c1 = 3
_ExcelWriteCell($oExcel, $a1, 1, 1) ;写入内容到单元格A1
_ExcelWriteCell($oExcel, $b1, 1, 2) ;写入内容到单元格B1
_ExcelWriteCell($oExcel, $c1, 1, 3) ;写入内容到单元格C1
Do
Sleep(1000)
Until D1 已经完成计算得到了结果。 即现在这一行的代码应该如何写?
MsgBox(0,'D1的最终结果为:',_ExcelReadCell($oExcel,1,4))
解决办法:$oExcel.application.calculationstate=0 你想的太多了。那么样子的公式,你的excel文件还能用吗 回复 1# fenhanxue
可以试一下:
until $oExcel.application.calculationstate=0
不过,如果公式要计算那么长时间,我相信应该不是公式太复杂,而是公式的各种引用之间的关系太复杂,应该改变处理方式了 回复 3# kevinch
非常感谢kevinch 指点,论坛里学了很多您指导的excel相关操作帖,非常有用,再次感谢
页:
[1]