fenhanxue 发表于 2017-5-26 15:12:59

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

h20040606 发表于 2017-5-27 04:47:31

你想的太多了。那么样子的公式,你的excel文件还能用吗

kevinch 发表于 2017-5-27 07:36:39

回复 1# fenhanxue
可以试一下:
until $oExcel.application.calculationstate=0

不过,如果公式要计算那么长时间,我相信应该不是公式太复杂,而是公式的各种引用之间的关系太复杂,应该改变处理方式了

fenhanxue 发表于 2017-5-27 10:24:19

回复 3# kevinch


    非常感谢kevinch 指点,论坛里学了很多您指导的excel相关操作帖,非常有用,再次感谢
页: [1]
查看完整版本: excle 如何判断指定单元格的公式已经计算完成 【已解决】