找回密码
 加入
搜索
查看: 10988|回复: 16

[效率算法] excel 处理效率[已解决]

 火.. [复制链接]
发表于 2012-8-10 22:00:49 | 显示全部楼层 |阅读模式
本帖最后由 骗子 于 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

有什么办法能实现类似于手动操作的时候鼠标在单元格的右下角那一拉,就直接按规律填充了
发表于 2012-8-10 22:20:04 | 显示全部楼层
本帖最后由 ajian55 于 2012-8-10 22:21 编辑

回复 1# 骗子
#include <Excel.au3>

$oExcel = _ExcelBookNew()

$begin = TimerInit()

Dim $e_a[1000][99]
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[100][10]
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下好像没有明显的差异
发表于 2012-8-10 22:40:51 | 显示全部楼层
要想操作Excel快,就得用它自己的脚本VBA
发表于 2012-8-11 01:16:25 | 显示全部楼层
不知道用sqlite如何
 楼主| 发表于 2012-8-11 07:38:13 | 显示全部楼层
要想操作Excel快,就得用它自己的脚本VBA
happytc 发表于 2012-8-10 22:40

对VBA一窍不通啊,能不能给个例子呢
 楼主| 发表于 2012-8-11 07:40:54 | 显示全部楼层
回复 5# netegg
sqlite也是一窍不通啊,都不知道是干什么的
发表于 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[100][10]
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[10][100]
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

评分

参与人数 1金钱 +20 收起 理由
骗子 + 20 牛,如果是跳行应该怎么做呢?

查看全部评分

 楼主| 发表于 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[18][1]
Dim $zimu = StringSplit('ABCDEFGHIJKLMNOPQRSTUVWXYZ', '')
;~ _ArrayDisplay ($zimu)
;~ Exit
;1=A,b=2.......
For $i = 0 To 999
        For $j = 0 To 17
                $e_a[$j][0] =  $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

已我的能力只能做到一行一行写了
发表于 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

本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +20 收起 理由
骗子 + 20 谢谢

查看全部评分

发表于 2012-8-15 17:09:08 | 显示全部楼层
谢谢楼主分享内容了!不错不错哦!
发表于 2012-8-15 17:26:14 | 显示全部楼层
$excel=ObjCreate("excel.application")
$excel.visible=True
$wb=$excel.workbooks.add
$stime=TimerInit()
Dim $arr[99][1000]
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))
参与一下

评分

参与人数 1金钱 +15 收起 理由
骗子 + 15 谢谢

查看全部评分

发表于 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))
公式实现

评分

参与人数 1金钱 +15 收起 理由
骗子 + 15 谢谢

查看全部评分

发表于 2013-5-13 17:03:33 | 显示全部楼层
谢谢楼主分享,学习了!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-10 06:03 , Processed in 0.086012 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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