Ich musste letztens xlsx-Dateien einlesen und mochte die Variante über Excel.au3 nicht wirklich, da diese durch Excel selbst ziemlichen Overhead hat und außerdem ist man darauf angewiesen dass Excel auch installiert ist. Also hab ich mir mal so eine xlsx-Datei näher angesehen und daraufhin eine kleine Funktion geschrieben, welche mir direkt mit Bordmitteln ein Worksheet aus der Datei in ein Array einliest.
Das ganze ist jetzt nicht wahnsinnig auf alle Spezialfälle hin ausgebaut sondern deckt bislang die Fälle ab, welche bei mir bisher aufgetreten sind. Es gibt wohl auch schon andere UDFs die das gleiche machen aber selbst machen, macht mehr Spaß!
Da die xlsx-Dateien entpackt werden müssen empfehle ich eine >>7za.exe<< mit zum Skript dazuzupacken, sonst wird auf die Shell.Application-Methode ausgewichen und die ist laaaaaaangsam...
Große Erklärung ist nicht notwendig:
#include <xlsxNative.au3>
; Array erstellen
Global $A[][] = [[1, 2, 3, 4, 5], ["", "6", 7, "", "8"], [], [9, "", "10", 11, True]]
_ArrayDisplay($A, "Array vorher")
; Array in xlsx-Datei konvertieren:
_xlsx_WriteFromArray(@ScriptDir & "\Text.xlsx", $A)
; xlsx-Datei in Array einlesen
$aSheet = _xlsx_2Array(@ScriptDir & "\Text.xlsx")
_ArrayDisplay($aSheet, "Array eingelesen")
Alles anzeigen
>>Download und Quellcode auf GitHub<<
Changelog:
2023/03/25 | _xlsx_2Array(): Array-Range-Exceed falls Zellkoordinaten verwendet werden und ganze Zeilen frei bleiben. |
2023/03/13 | _xlsx_2Array() - Fix: leere Zellen, welche dennoch Attribute haben, wurden nicht korrekt erkannt. _xlsx_2Array() - Fix: geteilte Strings, welche Attribute in ihrer <t>-Definition haben, wurden ignoriert. |
2023/02/27 | XML-Parsing komplett neu gestaltet - insbesondere bei großen Dateien teils massive Performancesteigerung hierdurch |
2023/01/26 | _xlsx_2Array(): Parameter zur Einschränkung auf bestimmte Spalten hinzugefügt. Komplette Überarbeitung der Funktion __getSubFiles() - die UDF sollte nun mit mehr XLSX-Typen klarkommen |
2023/01/22 | _xlsx_getWorkSheets() hinzugefügt: Mit dieser erhält man eine Liste mit id und Namen der in der xlsx-Datei enthaltenen Worksheets. |
2021/07/16 | _xlsx_WriteFromArray: Bugfix - XML-Sonderzeichen in Werten werden nun escaped |
2021/05/26 | _xlsx_2Array: Bugfix - @error = 5 bei mehr als 9 Worksheets |
2021/04/01 | _xlsx_2Array: Ermittlung der internen Dateien nun robuster |
2021/03/29 | _xlsx_WriteFromArray: Neue Funktion zur Erzeugung von xlsx-Dateien aus AutoIt-Arrays |
2020/08/07 | __xlsxExcel2Date: Stringausgabe (lokal formatiert) der Datums/Zeit-Werte implementiert |
2020/07/31 |
Fix: Zellen mit hybriden Zellinhalten wurden ignoriert Leere aber gestylte Zellen werden nicht mehr prozessiert (Leerzeilen werden vermieden und etwas schneller) |
2020/07/30 | Verbesserung der Namespace-Behandlung |
2020/07/29 | Parameter um auf bestimmte Zeilen einzugrenzen hinzugefügt |