pdp320921 发表于 2011-5-20 10:01:01

[已解决]如何加快Excel处理速度~

本帖最后由 pdp320921 于 2011-5-27 22:44 编辑

$o_Excel=objcreate("excel.application")
$o_Excel.visible=true
$o_Workbook=$o_Excel.workbooks.add
Send("^v");从其他文件中粘贴数据过来
with $o_Workbook
For $i = 1 To 1000
   If _ExcelReadCell($o_Workbook, 1, 3) = 100 Then ExitLoop       
      If_ExcelReadCell($o_Workbook, $i, 3) = 100And _ExcelReadCell($o_Workbook, $i-1, 3) <> 100 Then
....
....
对于上述代码,发现一个问题,在with...Endwith里面的语句执行的很慢,是for循环的缘故还?有没方法改善?
求解~

kevinch 发表于 2011-5-20 10:37:09

给出示例附件,帮你试下看看。

pdp320921 发表于 2011-5-20 13:09:53

回复 2# kevinch

复制附件中的数据到Excel中,以实现如图片中曲线~(Y坐标是以C1:C$i,i是数据为100时的行数,X坐标是A1:A$i)


kevinch 发表于 2011-5-20 14:48:11

$h_Log=FileOpen(@ScriptDir&"\battery.log",0)
$s_Str=FileRead($h_Log)
FileClose($h_Log)
ClipPut($s_Str)
$o_Excel=ObjCreate("excel.application")
$o_Excel.visible=True
$o_Workbook=$o_Excel.workbooks.add
with $o_Workbook.activesheet
        .paste(.range("a1"))
endwithTab在excel中本就是分隔符,所以直接用就行了,这个试下。

pdp320921 发表于 2011-5-20 15:36:20

回复 4# kevinch

感谢回复,可能我没讲清楚?
数据复制到Execel中我已经实现,我的问题是我执行 For $i = 1 To 400
                If _ExcelReadCell($o_Workbook, 1, 3) = 100 Then ExitLoop
                       
      If_ExcelReadCell($o_Workbook, $i, 3) = 100And _ExcelReadCell($o_Workbook, $i-1, 3) <> 100 Then

                  Send("{ALTDOWN}")
Send("{ALTUP}")
...发现有很长的延时~~
换句话说,如何用的别的方法去取代_ExcelReadCell($o_Workbook, $i, 3)来读取某个单元格的内容 使读取的时间加快~~??

kevinch 发表于 2011-5-20 15:59:43

说说你要的效果,代码看不懂!要读取单元格内容,然后做什么用,判断什么?

kevinch 发表于 2011-5-20 16:12:26

$h_Log=FileOpen(@ScriptDir&"\battery.log",0)
$s_Str=FileRead($h_Log)
FileClose($h_Log)
ClipPut($s_Str)
$o_Excel=ObjCreate("excel.application")
$o_Excel.visible=True
$o_Workbook=$o_Excel.workbooks.add
with $o_Workbook.activesheet
        .paste(.range("a1"))
        for $Rng in .range("a1:a"&.cells(.rows.count,1).end(3).row)
                if $Rng.value>1000 then
                        msgbox(0,"","单元格"&$Rng.address(0,0)&"的值大于1000了,退出循环")
                        ExitLoop
                EndIf
        Next
endwith循环判断的例子

pdp320921 发表于 2011-5-20 17:01:57

回复 7# kevinch
感谢回复!

算了,还是没讲清楚~
那请教个问题:
如何读取某一单元格的内容判断是否大于一数值(譬如100)并获得该单元格的行数?

kevinch 发表于 2011-5-20 17:04:38

单元格范围?
7楼例子里的地址.address(0,0)换成.row就是行号啦

pdp320921 发表于 2011-5-23 09:39:21

回复 9# kevinch


   换了还是不行~~~

kevinch 发表于 2011-5-23 11:42:03

回复kevinch


   换了还是不行~~~
pdp320921 发表于 2011-5-23 09:39 http://www.autoitx.com/images/common/back.gif
不行的结果是什么?只说不行让我怎么帮你?

oceanwind 发表于 2011-5-23 11:47:27

EXCEL本身就有VBA啊 既然数据已导入EXCEL 用VBA不好吗

pdp320921 发表于 2011-5-24 21:29:12

回复 11# kevinch
好了~` for $Rng in .range("a1:a"&.cells(.rows.count,1).end(3).row)
$Rng.address(0,0)各代表什么意思啊?

kevinch 发表于 2011-5-24 21:44:27

for $Rng in .range("a1:a"&.cells(.rows.count,1).end(3).row)循环从A1到A列有数据的最后一个单元格之间的各个单元格,$Rng得到的是各个单元格对象$Rng.address(0,0)$Rng的地址,以非绝对引用格式显示,你可以把各个0分别换成1试下

pdp320921 发表于 2011-5-24 22:22:16

回复 14# kevinch

感谢回复,感谢解答~
基本了解了~
这个是从VBA转成AU3的吗?
页: [1] 2
查看完整版本: [已解决]如何加快Excel处理速度~