excel 处理效率[已解决]
本帖最后由 骗子 于 2012-8-12 13:46 编辑谢谢各位了,代码见8楼和10楼吧
准备在EXCEL中很有规律的添加一些值,在excel03下运行速度还勉强能接受,到了10下就和牛车差不多了。
#include <Excel.au3>
$oExcel = _ExcelBookNew()
For $j = 1 To 99 ;列
$begin = TimerInit()
For $i = 1 To 1000 ;行
$filename1 = '行' & $i & ',列' & $j
_ExcelWriteCell($oExcel, $filename1, $i, $j)
Next
$dif = TimerDiff($begin)
MsgBox(0, 0, '处理1000行用时:' & $dif & '毫秒', 1)
Next
有什么办法能实现类似于手动操作的时候鼠标在单元格的右下角那一拉,就直接按规律填充了 本帖最后由 ajian55 于 2012-8-10 22:21 编辑
回复 1# 骗子 #include <Excel.au3>
$oExcel = _ExcelBookNew()
$begin = TimerInit()
Dim $e_a
For $i=0 To 999
For $j=0 To 98
$e_a[$i][$j] = '行' & $i & ',列' & $j
Next
Next
_ExcelWriteSheetFromArray($oExcel, $e_a, 1 , 1)
$dif = TimerDiff($begin)
MsgBox(0, 0, '处理1000行用时:' & $dif & '毫秒', 1)不知道速度有没有提高点~ 回复 2# ajian55
#include <Excel.au3>
#include <array.au3>
$oExcel = _ExcelBookNew()
$begin = TimerInit()
For $j = 1 To 10 ;列
For $i = 1 To 100 ;行
$filename1 = $i & ',' & $j
_ExcelWriteCell($oExcel, $filename1, $i, $j)
Next
Next
$dif = TimerDiff($begin)
MsgBox(0, 0, '处理1000行用时:' & $dif & '毫秒')
$begin1 = TimerInit()
Local $aArray
For $i = 0 To 99
For $j = 0 To 9
$aArray[$i][$j] = $i + 1 & ',' & $j + 1
Next
;~ _ExcelWriteSheetFromArray($oExcel, $aArray, $i, 1, 0, 0) ;基于 0 开始的数组参数
Next
;~ _ArrayDisplay($aArray)
_ExcelWriteSheetFromArray($oExcel, $aArray, 1, 1, 0, 0) ;基于 0 开始的数组参数
$dif1 = TimerDiff($begin1)
MsgBox(0, '处理1000行用时:' & $dif & '毫秒', '处理1000行用时:' & $dif1 & '毫秒')
_ExcelBookClose($oExcel, 0)
在03下好像没有明显的差异 要想操作Excel快,就得用它自己的脚本VBA 不知道用sqlite如何 要想操作Excel快,就得用它自己的脚本VBA
happytc 发表于 2012-8-10 22:40 http://www.autoitx.com/images/common/back.gif
对VBA一窍不通啊,能不能给个例子呢 回复 5# netegg
sqlite也是一窍不通啊,都不知道是干什么的 #include <Excel.au3>
#include <array.au3>
$oExcel = _ExcelBookNew()
example1()
example2()
example3()
Func example1()
$begin = TimerInit()
For $j = 1 To 10 ;列
For $i = 1 To 100 ;行
$filename1 = $i & ',' & $j
_ExcelWriteCell($oExcel, $filename1, $i, $j)
Next
Next
$dif = TimerDiff($begin)
MsgBox(0, 0, '处理1000行用时:' & $dif & '毫秒')
EndFunc
Func example2()
$begin1 = TimerInit()
Local $aArray
For $i = 0 To 99
For $j = 0 To 9
$aArray[$i][$j] = $i + 1 & ',' & $j + 1
Next
;~ _ExcelWriteSheetFromArray($oExcel, $aArray, $i, 1, 0, 0) ;基于 0 开始的数组参数
Next
;~ _ArrayDisplay($aArray)
_ExcelWriteSheetFromArray($oExcel, $aArray, 1, 1, 0, 0) ;基于 0 开始的数组参数
$dif1 = TimerDiff($begin1)
MsgBox(0, '处理1000行用时:' & $dif1 & '毫秒', '处理1000行用时:' & $dif1 & '毫秒')
EndFunc
Func example3()
$begin = TimerInit()
Dim $e_a
For $i=0 To 99
For $j=0 To 9
$e_a[$j][$i] = '行' & $i & ',列' & $j
Next
Next
$oExcel.activesheet.range("A1:J100").value = $e_a ; 使用上面的数字来 填写表格内容
$dif = TimerDiff($begin)
MsgBox(0, 0, '处理1000行用时:' & $dif & '毫秒', 1)
EndFunc 回复 8# 1007236046
如果不是连续的行应该怎么做?
例如
1、5、9.。。。。 1+$i行,其他的行不动
#include <Excel.au3>
#include <array.au3>
$oExcel = _ExcelBookNew()
$begin = TimerInit()
Dim $e_a
Dim $zimu = StringSplit('ABCDEFGHIJKLMNOPQRSTUVWXYZ', '')
;~ _ArrayDisplay ($zimu)
;~ Exit
;1=A,b=2.......
For $i = 0 To 999
For $j = 0 To 17
$e_a[$j] =$zimu[$j + 1] & $i + 1
Next
$XX = 'A' & 4 * $i + 1 & ':R' & 4 * $i + 1
$oExcel.activesheet.range($XX).value = $e_a ; 使用上面的数字来 填写表格内容
Next
$dif = TimerDiff($begin)
MsgBox(0, 0, '处理1000行用时:' & $dif & '毫秒')
Exit
已我的能力只能做到一行一行写了 可以使用粘贴来操作。 这样效率多了。
#include <Excel.au3>
$oExcel = _ExcelBookNew()
$begin = TimerInit()
Dim $text=""
Dim $zimu = StringSplit('ABCDEFGHIJKLMNOPQRSTUVWXYZ', '')
For $i = 0 To 999
For $j = 0 To 17
$text= $text & $zimu[$j + 1] & $i + 1&@TAB
Next
$text=$text&@CRLF&@CRLF&@CRLF&@CRLF
Next
With $oExcel.activesheet
ClipPut($text)
.paste(.range("a1"))
EndWith
$dif = TimerDiff($begin)
MsgBox(0, 0, '处理1000行用时:' & $dif & '毫秒')
Exit
谢谢楼主分享内容了!不错不错哦! $excel=ObjCreate("excel.application")
$excel.visible=True
$wb=$excel.workbooks.add
$stime=TimerInit()
Dim $arr
For $n=1 To 99
For $i=1 To 1000
$arr[$n-1][$i-1]="行"&$i&",列"&$n
Next
Next
$wb.activesheet.range("a1").resize(1000,99).value=$arr
$wb=0
$excel=0
MsgBox(0,"",TimerDiff($stime))参与一下 $excel=ObjCreate("excel.application")
$excel.visible=True
$wb=$excel.workbooks.add
$stime=TimerInit()
With $wb.activesheet.range("a1").resize(1000,99)
.formula='="行"&row()&",列"&column()'
.value=.value
EndWith
$wb=0
$excel=0
MsgBox(0,"",TimerDiff($stime))公式实现 谢谢楼主分享,学习了!
页:
[1]
2