cctt206 发表于 2016-3-23 17:07:13

请教:关于Autoit读取Excel多次后会报错 - 【已解决】

本帖最后由 cctt206 于 2016-3-29 10:25 编辑

请教一下各位,我会用Autoit打开一张Excel,然后读取其中一个单元格的数据,之后再关闭Excel。实测中如果多次操作后一定会报错。

(使用Autoit版本:V3.3.14.1)
我用了Autoit Help中自带的代码,也会有同样的问题,运行代码如下:

#include <Array.au3>
#include <Excel.au3>
#include <MsgBoxConstants.au3>
Local $sConfigFilePath = "C:\FDR test\Config file\FWUpgradeConfig.xlsx" ;
Local $iColumn;column of excel
Local $iRow; row of excel

For $iRow = 2 to 491 Step 1
; Create application object and open an example workbook
Local $oExcel = _Excel_Open()
Sleep(1000)
Local $oWorkbook = _Excel_BookOpen($oExcel, $sConfigFilePath)
Sleep(1000)
Local $sResult = _Excel_RangeRead($oWorkbook, Default, "A1")
Sleep(1000)
_Excel_Close($oExcel,True,True)
   Sleep(4000)
Next

Autoit报错如下:
“C:\Program Files\AotuIt3\Include\Excel.au3” (227) : ==> Variable must be of type “Object”.:
$oExcel.Windows($oWorkbook.Name).Visible = $bVisible
$oExcel.Windows($oWorkbook.Name)^ERROR
>Exit code: 1 Time 2429

请问大家有没有遇见过?可能会是什么原因?多谢!

kk_lee69 发表于 2016-3-24 15:48:30

回复 6# cctt206

改這樣試試
_Excel_Close($oExcel,True,True)
$oExcel =0
Sleep(4000)

kk_lee69 发表于 2016-3-24 09:34:04

回复 1# cctt206


    請在 退出 EXCEL後 多加一行$oExcel =0

cctt206 发表于 2016-3-24 14:47:05

回复 2# kk_lee69

谢谢你的答复,我按照你说的试了一下,“退出 EXCEL後 多加一行$oExcel =0”,
可是结果还是一样会报错,报出的错误提示也是一样的。。。

kk_lee69 发表于 2016-3-24 14:50:19

回复 3# cctt206


你加在哪邊??

kk_lee69 发表于 2016-3-24 14:52:20

回复 3# cctt206


你加在哪邊??

另外請問一下 你開次開啟 多次關閉的原因是??只是為了讀取 一個工作頁的東西嗎??

cctt206 发表于 2016-3-24 15:12:37

回复 5# kk_lee69

我加在了这段话后面:
“_Excel_Close($oExcel,True,True)
Sleep(4000)”
$oExcel =0

这段程序是我简化后的程序,只是为了说明这个出错的现象。
我实际程序中是用这张Excel表格作为一张配置表格,每个test case都会打开,读取一下这个case的测试配置是什么样的;实际测试中读取的是不同行的配置;
之所以每个case读完配置后需要关掉这张表格,是因为后面的测试中,我们另外一个测试程序也会要调用excel,不关的话会报另外的错。。。

chamlien 发表于 2016-3-24 15:36:55

回复 6# cctt206 #include <Array.au3>
#include <Excel.au3>
Local $sConfigFilePath = "C:\FDR test\Config file\FWUpgradeConfig.xlsx" ;


Local $oWorkbook = _ExcelBookOpen( $sConfigFilePath)
Sleep(1000)
Local $sResult =_ExcelReadCell($oWorkbook, 1, 1)
Sleep(1000)
MsgBox(0,0, $sResult)
_ExcelBookClose($oWorkbook, 1, 0)试试在最新版编译器下运行

kk_lee69 发表于 2016-3-24 15:52:07

回复 1# cctt206

如果從錯誤訊息來看 出錯的是
$oExcel.Windows($oWorkbook.Name).Visible = $bVisible
$oExcel.Windows($oWorkbook.Name)^ERROR

表示在這段語法上 不知道甚麼原因出錯了

我猜想 在重複多次的執行上   導致 反應不及 因此導致錯誤

解決方法

在做這行動作之前 可不可以暫停一下 等待 EXCEL 做完
或者 改個寫法或者 改變個順序之類的

tank 发表于 2016-3-24 15:53:26

你这样处理不合适,EXCEL先要当做文本打开,又要被系统API调用,多次调用后内存里都不知多少垃圾,一定会冲突出错的。

cctt206 发表于 2016-3-24 16:34:51

回复 8# kk_lee69

这个我试过了,是一样的会报错。

cctt206 发表于 2016-3-24 16:36:39

回复 9# kk_lee69

这个错误不会出现在一开始,要跑一段时间后才会出现。我每次读完后都是有delay的时间的,感觉像是程序跑久了,越来越慢了?。。。

cctt206 发表于 2016-3-24 16:37:53

回复 10# tank


如果是这个原因的话,请问我怎么处理比较好呢?如何可以释放掉这些内存里的垃圾?

kk_lee69 发表于 2016-3-24 16:41:43

回复 12# cctt206

不知道是否方便 提供實際的程式與檔案 才能查問題在哪 從哪去避掉

要不然大概都只能猜測是 由於 重複太多次記憶體 卡住 或者延遲造成出錯
很難找出原因

cctt206 发表于 2016-3-24 16:50:49

回复 14# kk_lee69


实际程序比较大,还调用了labview等等。我是出现报错后,慢慢把程序简化成这样,找到报错的最小程序的。
PC上只跑下面这段程序就会出现报错了:Autoit多次打开读取文件再关闭,就会直接报错:
#include <Array.au3>
#include <Excel.au3>
#include <MsgBoxConstants.au3>
Local $sConfigFilePath = "C:\FDR test\Config file\FWUpgradeConfig.xlsx" ;
Local $iColumn;column of excel
Local $iRow; row of excel

For $iRow = 2 to 491 Step 1
; Create application object and open an example workbook
Local $oExcel = _Excel_Open()
Sleep(1000)
Local $oWorkbook = _Excel_BookOpen($oExcel, $sConfigFilePath)
Sleep(1000)
Local $sResult = _Excel_RangeRead($oWorkbook, Default, "A1")
Sleep(1000)
_Excel_Close($oExcel,True,True)
$oExcel =0
   Sleep(4000)
Next
页: [1] 2
查看完整版本: 请教:关于Autoit读取Excel多次后会报错 - 【已解决】