Bisher habe ich in meinem GuiXT Kurs immer eine DLL Datei (exceldotnet.dll) zur Verfügung gestellt mit der man Excel in GuiXT Variablen einlesen konnte.

Nachdem einige von meinen Kunden Probleme damit bekundet haben, nachdem Sie auf Office 365 migriert haben, habe ich mich entschlossen eine neue Version programmieren zu lassen.

Die neue Version (exceldotnet2.dll) ist jetzt unabhängig von der Officeversion. Dafür kann die Version nur die neuartigen Formate (*.xlsx und *.xlsm ) einlesen. Es kann sogar ein Excelfile eingelesen werden, wenn kein Excel installiert ist. Die neue Version liefert einen Langtext in dem JSON-Format, welches sich einfach in GuiXT in die neuen Tabellenvariablen einlesen lässt.
Die neue Bibliothek hat folgende Funktionen:

  • readfile_worksheets (Einlesen der Reiterbezeichnungen)
  • readfile_withheader (Einlesen der Daten mit Kopfzeile)
  • readfile_noheader (Einlesen der Daten ohne Kopfzeile)
  • writefile_worksheets (Zurückschreiben von einzelnen Zellen)
  • appendfile_worksheets (Anhängen von neuen Zeilen)

Wobei man bei der Funktion readfile_withheader wählen kann, ob die Spaltennamen aus der Headerzeile übernommen werden, oder ob man eine Durchnummerierung der Spalten wünscht. Wenn man die Spalten durchnummerieren will  (z.B. s,s2,s3…) gibt man beim Parameter z.B. tabname:=“s“ an, andernfalls lässt  man ihn leer.
Sind in der Headerzeile vom Excel unerlaubte Zeichen enthalten, so werden diese automatisch durch ein „_“ (Unterstrich)  ersetzt. Hat man in der Headerzeile des Excel zweimal dieselbe Spaltenbezeichnung, so wird bei jeglicher Wiederholung die Spaltenbezeichnung durch ein F2,F3… ersetzt. Diese Spezialbehandlungen wurden notwendig, da GuiXT bei der Definition einer Struktur keine Sonderzeichen ausser „_“ (Unterstrich)  und auch keine Doppelnennungen der Spalten zulässt.

Bei der Funktion readfile_noheader werden die Spalten mit F1,F2,F3 durchgezählt. Gibt man hier unter dem Parameter z.B.  tabname:=“s“ an, so werden die Spalten  mit s,s2,s3… durchgezählt.

Beispielscript:

// InputScript um ein neues Excel direkt in Tabellenvariablen einzulesen
// 17.03.2022 Gérald Koehn / Koehn Consulting / CH-3250 Lyss
Screen *

// --------------------- Einlesen der Reiter mit seinen Namen -------------------------------
Clear Text[Reiter]
CreateTable V[Reiter] name
callvb exceldotnet2.iface.readfile_worksheets excelfile:="&V[Excel_neu]" data:="Reiter"
CopyText fromText="Reiter" toTable=V[Reiter] -json

// ---------------------- Einlesen des ExcelWorksheets mit den Namen aus dem Header des Excel
Clear Text[Values]
callvb exceldotnet2.iface.readfile_withheader excelfile:="&V[Excel_neu]" worksheet:="Tabelle1" _
data:="Values" tabname:="" rowcount_name:="Anz_Zeilen1" columns_name:="Spaltennamen"
// Bilden der Struktur für die Tabellendefinition
// Allfällige Leerzeichen in den Spaltennamen werden durch _ ersetzt
Set V[i] 1
Clear V[structure]
Label Bilden_Struktur
CopyText fromText="Spaltennamen" toString="string" Line="&[i]"
if Q[ok]
Set V[structure] "&V[structure] &V[string]"
Set V[i] &[i] + 1
goto Bilden_Struktur
endif
CreateTable V[Tabelle_mit_echten_Spaltennamen] &V[structure]
CopyText fromText="Values" toTable=V[Tabelle_mit_echten_Spaltennamen] -json

// ---------------------- Einlesen des ExcelWorksheets mit den fortlaufenden Namen aus tabname
Clear Text[Values]
callvb exceldotnet2.iface.readfile_withheader excelfile:="&V[Excel_neu]" worksheet:="Tabelle1" _
data:="Values" tabname:="s" rowcount_name:="Anz_Zeilen2" columns_name:="Spaltennamen"
// Bilden der Struktur für die Tabellendefinition
Set V[i] 1
Clear V[structure]
Label Bilden_Struktur2
CopyText fromText="Spaltennamen" toString="string" Line="&[i]"
if Q[ok]
Set V[structure] "&V[structure] &V[string]"
Set V[i] &[i] + 1
goto Bilden_Struktur2
endif
CreateTable V[Tabelle_mit_vorgegebenen_Spaltennamen] &V[structure]
CopyText fromText="Values" toTable=V[Tabelle_mit_vorgegebenen_Spaltennamen] -json

Enter "?"

Bei der Funktion writefile_worksheets kann man einzelne Werte in einem Excelsheet überschreiben. Dazu übergibt man die einzelnen Werte an den Parameter „data“ über eine GuiXT Langtextvariable.

Wobei das JSON Format 3 Spalten enthalten sollte:
x = Zeilennummer im Excel
y = Spaltennummer im Excel
value = Wert der neu gesetzt werden sollte
Am besten trägt man die Koordinaten und den Wert in einer Tabellenvariable ein und überträgt diese dann an einen Langtext mit der Funktion CopyText.
ACHTUNG, hier können nur Zellen beschrieben werden die bereits schon im Excel existieren.

Bei der Funktion appendfile_worksheets kann man an ein bestehendes Excel zusätzliche Zeilen anhängen. Die Übergabe der neuen Zeilen erfolgt auch wieder im JSON Format und dem Parameter Data,
welchem man eine GuiXT Langtextvariable angibt, welches die Daten im JSON Format enthält.
Die Spaltenbezeichnung im JSON Format hat keine Relevanz, die Daten werden einfach von Spalte 1 – nn eingetragen in der Reihenfolge wie sie im JSON Format stehen.

 

Den entsprechenden VB Code und die zusätzlichen noch notwendigen Bibliotheken erhalten Sie auf Anfrage.
Falls Sie schon Kunde bei mir sind selbstverständlich kostenlos, andernfalls gegen eine kleine Gebühr.
Bei Interesse melden Sie sich  über das Kontaktformular.

Empfehlen