blue_dvd 发表于 2012-11-7 23:43:11

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

本帖最后由 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
      If $lastRow = 0 Then $lastRow = $usedRange
    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]
      Next
    Next

    ProgressOff()
    Return $aFixedArray
EndFunc ;==>_ExcelReadToArrayFast
读的速度快很多!

edisonx 发表于 2012-11-8 00:40:33

open your 'help file'
search the keyword : _ExcelReadSheetToArray ,
you'll get a sample :)

jingygr 发表于 2012-11-8 09:19:09

最近我也在玩读表格的,只是还没有发现这个速度问题,一楼的好像可以试试哦

blue_dvd 发表于 2012-11-8 10:12:02

回复 2# edisonx
新手都这么厉害!

netegg 发表于 2012-11-8 10:13:34

最快的用sqlite去读

edisonx 发表于 2012-11-8 14:44:36

本帖最后由 edisonx 于 2012-11-8 14:46 编辑

回复 4# blue_dvd


    不不不,我很弱,都是版上牛人先進不吝指導的。另真要求速度時,勢必如 netegg 兄所言,用 data-base language ( ex: sqlite) 完成。

jdd3 发表于 2012-11-8 17:00:34

{:face (332):}{:face (332):}

blue_dvd 发表于 2012-11-10 20:24:04

回复 5# netegg
能否给个详细点的例子?

lxwlxwayy 发表于 2012-11-10 20:29:00

我也想知道,帮顶

lxwlxwayy 发表于 2012-11-10 20:29:26

sqlite怎么用

netegg 发表于 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列。

lxwlxwayy 发表于 2012-11-12 08:17:49

Excel很方便的办公软件
页: [1]
查看完整版本: 关于读取Excel表格速度问题?[已解决]