骗子 发表于 2012-8-10 22:00:49

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:20:04

本帖最后由 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)不知道速度有没有提高点~

骗子 发表于 2012-8-10 22:38:20

回复 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下好像没有明显的差异

happytc 发表于 2012-8-10 22:40:51

要想操作Excel快,就得用它自己的脚本VBA

netegg 发表于 2012-8-11 01:16:25

不知道用sqlite如何

骗子 发表于 2012-8-11 07:38:13

要想操作Excel快,就得用它自己的脚本VBA
happytc 发表于 2012-8-10 22:40 http://www.autoitx.com/images/common/back.gif
对VBA一窍不通啊,能不能给个例子呢

骗子 发表于 2012-8-11 07:40:54

回复 5# netegg
sqlite也是一窍不通啊,都不知道是干什么的

1007236046 发表于 2012-8-11 08:52:43

#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

骗子 发表于 2012-8-11 09:12:01

回复 8# 1007236046

如果不是连续的行应该怎么做?
例如
1、5、9.。。。。 1+$i行,其他的行不动

骗子 发表于 2012-8-11 10:26:44


#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

已我的能力只能做到一行一行写了

lanfengc 发表于 2012-8-14 10:15:32

可以使用粘贴来操作。 这样效率多了。


#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

nxbigdaddy 发表于 2012-8-15 17:09:08

谢谢楼主分享内容了!不错不错哦!

kevinch 发表于 2012-8-15 17:26:14

$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))参与一下

kevinch 发表于 2012-8-15 17:30:34

$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))公式实现

32714107 发表于 2013-5-13 17:03:33

谢谢楼主分享,学习了!
页: [1] 2
查看完整版本: excel 处理效率[已解决]