自动获取Excel值

自动获取Excel值,excel,autoit,Excel,Autoit,我正在从Excel到Autoit脚本获取值。Autoit脚本独立工作,不受Excel vba或其他工具的驱动。一切工作都很完美,但Excel值在vba的作用下不断变化,问题由此开始。Autoit每500 msc从excel获取一次值,但在vba更新值时无法从excel获取值,这会导致Autoit错误并终止脚本执行。我试图处理autoit错误,但运气不佳。我希望达到的目标是,当脚本出错时,将其休眠一秒钟,然后重试。这是我的剧本 #include <Excel.au3> #include

我正在从Excel到Autoit脚本获取值。Autoit脚本独立工作,不受Excel vba或其他工具的驱动。一切工作都很完美,但Excel值在vba的作用下不断变化,问题由此开始。Autoit每500 msc从excel获取一次值,但在vba更新值时无法从excel获取值,这会导致Autoit错误并终止脚本执行。我试图处理autoit错误,但运气不佳。我希望达到的目标是,当脚本出错时,将其休眠一秒钟,然后重试。这是我的剧本

#include <Excel.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include "WinHttp.au3"
#include <Date.au3>


; Attach to the first Workbook where the file name matches
Local $sWorkbook = "Ant_5.xlsm"
$oWorkbook = _Excel_BookAttach($sWorkbook, "filename")
If @error Then
   ConsoleWrite("Error attaching to '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Endif


Func getData()
   $LastRow = $oWorkbook.Worksheets("Selector").UsedRange.Rows.Count
   $mydata = _Excel_RangeRead($oWorkbook, "Selector", "A1:P" & $LastRow)
   $i=0
   $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
   For $i = 2 To $LastRow-1
      if $mydata[$i][0]<>"" Then
            $cDate=$mydata[$i][0]
            $cTime=$mydata[$i][1]
            $cRule=$mydata[$i][5]
            ConsoleWrite($cRule& @CRLF)
      EndIf
   Next
EndFunc


getData()
#包括
#包括
#包括
#包括“WinHttp.au3”
#包括
; 附加到文件名匹配的第一个工作簿
本地$sWorkbook=“Ant_5.xlsm”
$oWorkbook=\u Excel\u BookAttach($sWorkbook,“文件名”)
如果@error那么
ConsoleWrite(“错误附加到“&$sWorkbook&”。&@CRLF&“@Error=“&@Error&”,@extended=“&@extended”)
恩迪夫
Func getData()
$LastRow=$oWorkbook.Worksheets(“选择器”).UsedRange.Rows.Count
$mydata=\u Excel\u RangeRead($oWorkbook,“Selector”,“A1:P”和$LastRow)
$i=0
$oHTTP=ObjCreate(“WinHttp.WinHttpRequest.5.1”)
对于$i=2到$LastRow-1
如果$mydata[$i][0]“”则
$cDate=$mydata[$i][0]
$cTime=$mydata[$i][1]
$cRule=$mydata[$i][5]
控制台写入($cRule和@CRLF)
恩迪夫
下一个
EndFunc
getData()

我通过在Excel中选择一个单元格来模拟错误。此自动操作失败后,我需要让它在wile之后重试,直到它获得数据。

您使用vba做什么?也许用Autoit也可以这样做。另一种选择是复制文件,然后在没有运行vba代码的副本上运行脚本。我同意使用AutoIt替换vba。如果你不能,但是,你需要让我们知道什么AutoIt错误时,你得到退出。我猜,\u Excel\u RangeRead不会返回数据,您试图从无效数组中获取值。您使用vba做什么?也许用Autoit也可以这样做。另一种选择是复制文件,然后在没有运行vba代码的副本上运行脚本。我同意使用AutoIt替换vba。如果你不能,但是,你需要让我们知道什么AutoIt错误时,你得到退出。我猜_Excel_RangeRead不返回数据,您试图从无效数组中获取值