Grüße!
Großes, kleines Projekt, wie es noch einmal so ist. ![]()
Im Moment liebäugle ich damit einen Teil meines Scripts zu optimieren, welches sich mit dem Umsortieren großer Datenmengen in Excel befasst.
Die Daten stammen aus einem dynamischen 2D-Array.
Langsamste Stelle im Script ist aktuell das Schreiben einer gesamten Spalte des 2D-Arrays in die (sich ständig ändernde) Excel-Spalte.
Aktuell schreibt das Skript jede Zeile dieser Spalte manuell in die Datei.
Vereinfachtes Beispiel:
Spoiler anzeigen
#include <Excel.au3>
[/autoit] [autoit][/autoit] [autoit]$File = @ScriptDir & "\Example.xlsx"
[/autoit] [autoit][/autoit] [autoit]$oExcel = _Excel_Open(False, False, False, False, True) ; hidden thread
$hExcel = _Excel_BookOpen($oExcel, $File)
$aContent = _Excel_RangeRead($hExcel)
For $i=0 To UBound($aContent, 1)-1 Step 1
_Excel_RangeWrite($hExcel, Default, $aContent[$i][1], "E" & ($i+1))
Next
_Excel_BookClose($hExcel)
_Excel_Close($oExcel)
Bei steigendem row-count dauert das natürlich entsprechend lange.
Gibt es eine Möglichkeit, direkt eine bestimmte Array-Spalte oder -Zeile in eine Excel-Spalte/-Zeile zu schreiben, ohne die einzelnen Felder des Arrays per loop durchzugehen?
Ich dachte daran, vielleicht direkt VBA-Code an das Objekt zu hängen statt die Funktion zu verwenden, aber aus den VBA-Schnipseln innerhalb der RangeWrite-Funktion der UDF werde ich diesbezüglich nicht schlau.
Vielleicht habt's ihr noch einen spontanen Hinweis.
Cheerio,
Matricus