_ExcelReadSheetToArray zu langsam

  • Hallo AutoIt-Freunde,

    gibt es eine Möglichkeit folgenden Part noch zu beschleunigen?

    [autoit]

    $oExcel=_ExcelBookOpen(@ScriptDir & "\test.xls",0 ,True)
    $aSheet=_ExcelReadSheetToArray($oExcel, 1, 1, 0, 10, True)
    _ExcelBookClose($oExcel)

    [/autoit]

    Script soll ca. 50 000 Zeilen mit je 10 Spalten aus einer Excel-Datei in ein Array einlesen.

    Dies dauert ca. 25 Minuten. Das ist leider sehr lange :/
    Gibt es eine schnellere Variante?


    Vielen Dank schon mal für Eure Unterstützung

    Mfg Inferior

    Einmal editiert, zuletzt von Inferior (6. März 2013 um 11:25)

  • Ja, sowas z.B.:

    [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _Excel_RangeRead
    ; Description ...: Reads the value, formula or displayed text from a cell or range of cells of the specified workbook and worksheet.
    ; Syntax.........: _Excel_RangeRead($oExcel[, $oWorkbook = Default[, $oWorksheet = Default[, $vRange = Default[, $iReturn = 1]]]])
    ; Parameters ....: $oExcel - Excel application object
    ; $oWorkbook - Optional: Excel workbook object. If set to Default the active workbook will be used
    ; $oWorksheet - Optional: Excel worksheet object. If set to Default the active sheet will be used
    ; $vRange - Optional: Either a range object or an A1 range. If set to Default all used cells will be processed
    ; $iReturn - Optional: What to return of the specified cell:
    ; |1 - Value (default)
    ; |2 - Formula
    ; |3 - The displayed text
    ; Return values .: Success - Returns the data from the specified cell(s). A string for a cell, an zero-based array for a range of cells.
    ; Failure - Returns 0 and sets @error:
    ; |1 - $oExcel is not an object
    ; |2 - $oWorkbook is not an object
    ; |3 - $oWorksheet is not an object
    ; |4 - $vRange is invalid
    ; |5 - Parameter $iReturn is invalid. Has to be > 1 and < 3
    ; |6 - Error occurred when reading data. @extended is set to the error code returned when accessing the Value property
    ; Author ........: SEO <locodarwin at yahoo dot com>
    ; Modified.......: litlmike, water
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......: Yes
    ; ===============================================================================================================================
    Func _Excel_RangeRead($oExcel, $oWorkbook = Default, $oWorksheet = Default, $vRange = Default, $iReturn = Default)
    If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    If $oWorkbook = Default Then $oWorkbook = $oExcel.ActiveWorkbook
    If Not IsObj($oWorkbook) Then Return SetError(2, 0, 0)
    If $oWorksheet = Default Then $oWorksheet = $oWorkbook.Activesheet
    If Not IsObj($oWorksheet) Then Return SetError(3, 0, 0)
    If $vRange = Default Then $vRange = $oWorksheet.Usedrange
    If IsString($vRange) Then $vRange = $oExcel.Range($vRange)
    If Not IsObj($vRange) Then Return SetError(4, 0, 0)
    If $iReturn = Default Then $iReturn = 1
    If $iReturn < 1 Or $iReturn > 3 Then Return SetError(5, 0, 0)
    Local $vResult
    If $iReturn = 1 Then
    $vResult = $oExcel.Transpose($vRange.Value)
    ElseIf $iReturn = 2 Then
    $vResult = $oExcel.Transpose($vRange.Formula)
    Else
    $vResult = $oExcel.Transpose($vRange.Text)
    EndIf
    If @error Then Return SetError(6, @error, 0)
    Return $vResult
    EndFunc ;==>_Excel_RangeRead

    [/autoit]
  • Hallo water,

    das ist perfekt! Vorallem super schnell!

    vielen herzlichen Dank! - Genau das habe ich gesucht.

    Mfg Inferior

  • :thumbup: