找回密码
 加入
搜索
查看: 8592|回复: 19

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

 火.. [复制链接]
发表于 2011-5-20 10:01:01 | 显示全部楼层 |阅读模式
本帖最后由 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) = 100  And _ExcelReadCell($o_Workbook, $i-1, 3) <> 100 Then
....
....
对于上述代码,发现一个问题,在with...Endwith里面的语句执行的很慢,是for循环的缘故还?有没方法改善?
求解~
发表于 2011-5-20 10:37:09 | 显示全部楼层
给出示例附件,帮你试下看看。
 楼主| 发表于 2011-5-20 13:09:53 | 显示全部楼层
回复 2# kevinch

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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 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"))
endwith
Tab在excel中本就是分隔符,所以直接用就行了,这个试下。

评分

参与人数 1金钱 +10 贡献 +5 收起 理由
pdp320921 + 10 + 5 学习了~

查看全部评分

 楼主| 发表于 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) = 100  And _ExcelReadCell($o_Workbook, $i-1, 3) <> 100 Then

                  Send("{ALTDOWN}")
Send("{ALTUP}")
...
发现有很长的延时~~
换句话说,如何用的别的方法去取代_ExcelReadCell($o_Workbook, $i, 3)来读取某个单元格的内容 使读取的时间加快~~??
发表于 2011-5-20 15:59:43 | 显示全部楼层
说说你要的效果,代码看不懂!要读取单元格内容,然后做什么用,判断什么?
发表于 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
循环判断的例子

评分

参与人数 2金钱 +30 贡献 +5 收起 理由
pdp320921 + 5 乐于助人~
3mile + 30 学习了

查看全部评分

 楼主| 发表于 2011-5-20 17:01:57 | 显示全部楼层
回复 7# kevinch
感谢回复!

算了,还是没讲清楚~
那请教个问题:
如何读取某一单元格的内容判断是否大于一数值(譬如100)并获得该单元格的行数?
发表于 2011-5-20 17:04:38 | 显示全部楼层
单元格范围?
7楼例子里的地址.address(0,0)换成.row就是行号啦
 楼主| 发表于 2011-5-23 09:39:21 | 显示全部楼层
回复 9# kevinch


   换了还是不行~~~
发表于 2011-5-23 11:42:03 | 显示全部楼层
回复  kevinch


   换了还是不行~~~
pdp320921 发表于 2011-5-23 09:39

不行的结果是什么?只说不行让我怎么帮你?
发表于 2011-5-23 11:47:27 | 显示全部楼层
EXCEL本身就有VBA啊 既然数据已导入EXCEL 用VBA不好吗
 楼主| 发表于 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)
各代表什么意思啊?
发表于 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试下

评分

参与人数 1金钱 +10 收起 理由
pdp320921 + 10 学习了~

查看全部评分

 楼主| 发表于 2011-5-24 22:22:16 | 显示全部楼层
回复 14# kevinch

感谢回复,感谢解答~
基本了解了~
这个是从VBA转成AU3的吗?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-30 11:32 , Processed in 0.086606 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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