自动获取Excel值

问题描述 投票:1回答:1

我正在从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
1个回答
0
投票

我喜欢您采用的方法,将其全部抓取,然后在内存中使用。从我看来,您正在逐行阅读?我不太了解Excel库,但是有没有办法将它们全部读取到AutoIt内存中的数组中?然后处理整个内存中的内容。

[不介绍更多要学习的东西,但是您可以看一下名为EPPlus的.NET编程库-它直接与Excel中的XML表示一起使用,并且具有许多实用程序。我真的很喜欢AutoIt,但EEPLus可能值得一看。

© www.soinside.com 2019 - 2024. All rights reserved.