我正在从Excel到Autoit脚本获取值。 Autoit脚本独立运行,不受Excel vba等驱动。一切正常,但是Excel值随vba不断变化,因此问题开始出现。 Autoit每500 msc从excel获取值,但是在vba更新值时无法从excel获取值,这会导致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()
我通过在Excel中选择一个单元格来模拟错误。在此Autoit失败之后,但我需要经过反复调试才能获取数据。
我喜欢您采用的方法,将其全部抓取,然后在内存中使用。从我看来,您正在逐行阅读?我不太了解Excel库,但是有没有办法将它们全部读取到AutoIt内存中的数组中?然后处理整个内存中的内容。
[不介绍更多要学习的东西,但是您可以看一下名为EPPlus的.NET编程库-它直接与Excel中的XML表示一起使用,并且具有许多实用程序。我真的很喜欢AutoIt,但EEPLus可能值得一看。