找回密码
 加入
搜索
查看: 12869|回复: 25

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

 火.. [复制链接]
发表于 2016-3-23 17:07:13 | 显示全部楼层 |阅读模式
本帖最后由 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

请问大家有没有遇见过?可能会是什么原因?多谢!
发表于 2016-3-24 15:48:30 | 显示全部楼层
回复 6# cctt206

改這樣試試
_Excel_Close($oExcel,True,True)
$oExcel =0
Sleep(4000)
发表于 2016-3-24 09:34:04 | 显示全部楼层
回复 1# cctt206


    請在 退出 EXCEL後 多加一行  $oExcel =0
 楼主| 发表于 2016-3-24 14:47:05 | 显示全部楼层
回复 2# kk_lee69

谢谢你的答复,我按照你说的试了一下,“退出 EXCEL後 多加一行  $oExcel =0”,
可是结果还是一样会报错,报出的错误提示也是一样的。。。
发表于 2016-3-24 14:50:19 | 显示全部楼层
回复 3# cctt206


你加在哪邊??
发表于 2016-3-24 14:52:20 | 显示全部楼层
回复 3# 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,不关的话会报另外的错。。。
发表于 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)
试试在最新版编译器下运行
发表于 2016-3-24 15:52:07 | 显示全部楼层
回复 1# cctt206

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

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

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

解決方法

在做這行動作之前 可不可以暫停一下 等待 EXCEL 做完
或者 改個寫法  或者 改變個順序之類的
发表于 2016-3-24 15:53:26 | 显示全部楼层
你这样处理不合适,EXCEL先要当做文本打开,又要被系统API调用,多次调用后内存里都不知多少垃圾,一定会冲突出错的。
 楼主| 发表于 2016-3-24 16:34:51 | 显示全部楼层
回复 8# kk_lee69

这个我试过了,是一样的会报错。
 楼主| 发表于 2016-3-24 16:36:39 | 显示全部楼层
回复 9# kk_lee69

这个错误不会出现在一开始,要跑一段时间后才会出现。我每次读完后都是有delay的时间的,感觉像是程序跑久了,越来越慢了?。。。
 楼主| 发表于 2016-3-24 16:37:53 | 显示全部楼层
回复 10# tank


如果是这个原因的话,请问我怎么处理比较好呢?如何可以释放掉这些内存里的垃圾?
发表于 2016-3-24 16:41:43 | 显示全部楼层
回复 12# 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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-17 04:52 , Processed in 0.081382 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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