找回密码
 加入
搜索
查看: 1486|回复: 3

[系统综合] excle 如何判断指定单元格的公式已经计算完成 【已解决】

[复制链接]
发表于 2017-5-26 15:12:59 | 显示全部楼层 |阅读模式
本帖最后由 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  = 1  B1  = 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
发表于 2017-5-27 04:47:31 | 显示全部楼层
你想的太多了。那么样子的公式,你的excel文件还能用吗
发表于 2017-5-27 07:36:39 | 显示全部楼层
回复 1# fenhanxue
可以试一下:
until $oExcel.application.calculationstate=0

不过,如果公式要计算那么长时间,我相信应该不是公式太复杂,而是公式的各种引用之间的关系太复杂,应该改变处理方式了
 楼主| 发表于 2017-5-27 10:24:19 | 显示全部楼层
回复 3# kevinch


    非常感谢kevinch 指点,论坛里学了很多您指导的excel相关操作帖,非常有用,再次感谢
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-17 02:51 , Processed in 0.160995 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表