找回密码
 加入
搜索
查看: 5680|回复: 13

[效率算法] 关于读取Excel表格速度问题?[已解决]

  [复制链接]
发表于 2012-11-7 23:43:11 | 显示全部楼层 |阅读模式
本帖最后由 blue_dvd 于 2012-11-17 08:04 编辑

测试过用_ExcelReadCell($oExcel, 行,列)时读取Excel表格的速度好慢,我计算过了,大概36行*10列的表格用了15秒,有没有更快的读取Excel表格的过程或函数?或是在读取过程中,有个图标或文字说明正在读取中!具体给个例子,谢谢!
花了几个小时搜论坛找到一位高手的解答
Func _ExcelReadToArrayFast($oExcel, $firstRow=1, $firstCol=1, $lastRow=0, $lastCol=0, $vSheet="")
    $usedRange = _ExcelSheetUsedRangeGet($oExcel, $vSheet)
    If IsArray($usedRange) Then
        If $lastCol = 0 Then $lastCol = $usedRange[2]
        If $lastRow = 0 Then $lastRow = $usedRange[3]
    Else
        Return 0
    EndIf

    Dim $aFixedArray[$lastRow - $firstRow + 2][$lastCol - $firstCol + 2]
    ProgressOn("读取进度", "努力读取中...")

    For $i = $firstRow To $lastRow
        ProgressSet($i/($lastRow/100), "读取第"&$i&"行 / 总行数"&$lastRow - $firstRow)
        $aTempArray = $oExcel.Activesheet.Range($oExcel.Cells($i, $firstCol), $oExcel.Cells($i, $lastCol)).Value
        $b = $i - $firstRow + 1
        For $a = 0 To ($lastCol - $firstCol)
            $c = $a + 1
            $aFixedArray[$b][$c] = $aTempArray[$a][0]
        Next
    Next

    ProgressOff()
    Return $aFixedArray
EndFunc ;==>_ExcelReadToArrayFast
读的速度快很多!
发表于 2012-11-8 00:40:33 | 显示全部楼层
open your 'help file'
search the keyword : _ExcelReadSheetToArray ,
you'll get a sample :)
发表于 2012-11-8 09:19:09 | 显示全部楼层
最近我也在玩读表格的,只是还没有发现这个速度问题,一楼的好像可以试试哦
 楼主| 发表于 2012-11-8 10:12:02 | 显示全部楼层
回复 2# edisonx
新手都这么厉害!
发表于 2012-11-8 10:13:34 | 显示全部楼层
最快的用sqlite去读
发表于 2012-11-8 14:44:36 | 显示全部楼层
本帖最后由 edisonx 于 2012-11-8 14:46 编辑

回复 4# blue_dvd


    不不不,我很弱,都是版上牛人先進不吝指導的。另真要求速度時,勢必如 netegg 兄所言,用 data-base language ( ex: sqlite) 完成。
发表于 2012-11-8 17:00:34 | 显示全部楼层

评分

参与人数 1金钱 -20 贡献 -1 收起 理由
afan -20 -1 警告,禁止纯表情!

查看全部评分

 楼主| 发表于 2012-11-10 20:24:04 | 显示全部楼层
回复 5# netegg
能否给个详细点的例子?
发表于 2012-11-10 20:29:00 | 显示全部楼层
我也想知道,帮顶
发表于 2012-11-10 20:29:26 | 显示全部楼层
sqlite怎么用
发表于 2012-11-10 22:06:27 | 显示全部楼层
原来写过些,没留着,也想不起来了,扔个网址http://www.connectionstrings.com/excel#85,自己看吧
发表于 2012-11-11 23:24:18 | 显示全部楼层
$oExcel = _ExcelBookOpen(GUICtrlRead($input), 1)
$aArray1 = $oExcel.activesheet.range("a" & 1).resize(100, 20).value
发表于 2012-11-11 23:31:55 | 显示全部楼层
将活动表的 A1开始100行,20列放到数组中。出来的数组是20行,100列。
发表于 2012-11-12 08:17:49 | 显示全部楼层
Excel很方便的办公软件
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-21 05:13 , Processed in 0.082514 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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