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)

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 "?"

Den entsprechenden 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