Import-EulFromExcel #
ÜBERSICHT #
Importiert eine Excel-Datei (.xlsx) als INSERT/UPDATE in eine EULANDA-Tabelle (Upsert per fachlichem Schlüssel).
SYNTAX #
Import-EulFromExcel [-Conn] <__ComObject> [-Path] <string> [-Table] <string> [-KeyColumns]
<string[]> [[-WorksheetName] <string>] [[-Mode] <string>] [[-OnError] <string>]
[[-BreadcrumbColumnName] <string>] [[-BreadcrumbSeparator] <string>] [[-SplitLanguages]
<string[]>] [[-SplitColumns] <string[]>] [-PreflightFK] [[-LogicalFK] <hashtable>]
[[-MissingFK] <string>] [-DryRun] [-PassThru] [[-IgnoreFieldsOnUpdate] <string[]>]
[-RecalcEkFromRabatt] [[-SupplierId] <int>] [-AutoCreate] [[-MatchStrategy] <string[]>]
[[-BarcodeColumn] <string>] [[-SupplierPriceColumns] <string[]>]
BESCHREIBUNG #
Liest ein Excel-Tabellenblatt und wendet jede Datenzeile als Upsert auf die Ziel-Tabelle an. Der fachliche Schlüssel wird per -KeyColumns festgelegt (z.B. 'ArtNummer' bei Artikel, 'Match' bei Adresse). DB-interne Identity-Spalten (z.B. ID) werden NICHT als Schlüssel verwendet – die ID einer Excel-Zeile ist nur innerhalb derselben Datenbank gültig und wird beim Schreiben automatisch ignoriert.
Sonderspalte _Breadcrumbs (Default-Name): enthält die zugewiesenen Merkmal-Pfade, mehrere getrennt durch ;. Wird nach erfolgreichem INSERT/UPDATE per Set-Breadcrumbs -Mode Replace synchronisiert. Leere Zelle bedeutet “keine Merkmale”. Spalte kann fehlen (dann werden Merkmale nicht angefasst).
Fehler-Verhalten pro Zeile:
Stop(Default): erste fehlerhafte Zeile bricht den Import ab.Skip: protokollieren, weitermachen, Zeile als Failed zählen.Continue: wie Skip, aber ohne Warnung.
Mit -DryRun werden alle Prüfungen durchlaufen (Schema, Schlüssel, Konflikte), aber kein INSERT/UPDATE ausgeführt. Hilfreich um vor dem “echten” Import die Zeilen-Anzahlen abzusichern.
PARAMETER #
-Conn #
Type: __ComObject
Offene ADODB-Verbindung. Caller-owns-Connection, wird NICHT geschlossen.
-Path #
Type: string
Pfad zur .xlsx-Datei.
-Table #
Type: string
Ziel-Tabelle in der EULANDA-Datenbank.
-KeyColumns #
Type: string[]
Eine oder mehrere Spalten der Ziel-Tabelle, die zusammen den fachlichen Schlüssel bilden. Beispiel: 'ArtNummer' bei Artikel. MÜSSEN als Spalten in der Excel-Datei vorhanden sein.
-WorksheetName #
Type: string
Tabellenblatt-Name. Default: Tabellenname.
-Mode #
Type: string
Default: 'Upsert'
Upsert (Default) / InsertOnly / UpdateOnly. Verhalten siehe Invoke-EulUpsert.
-OnError #
Type: string
Default: 'Stop'
Stop (Default) / Skip (mit Warnung) / Continue (still).
-BreadcrumbColumnName #
Type: string
Default: '_Breadcrumbs'
Spaltenname für die Merkmal-Pfade. Default: _Breadcrumbs. Spalte wird automatisch erkannt und nicht als DB-Spalte interpretiert.
-BreadcrumbSeparator #
Type: string
Default: '\s*[;]\s*'
Regex-Trenner zwischen Pfaden in der Excel-Zelle. Default '\s*[;]\s*' (Semikolon, optional umschlossen von Whitespace).
-SplitLanguages #
Type: string[]
Iso-Codes, für die der Import nach <Spalte>_<iso> und <Spalte>_other Sub-Spalten in der Excel-Datei sucht und sie zu einem EULANDA-Tag-Block re-assembliert. Pendant zum Export.
-SplitColumns #
Type: string[]
Zielspalten der Re-Assemblierung (z.B. ‘Langtext’). Muss mit -SplitLanguages zusammen verwendet werden.
-PreflightFK #
Type: switch
Wenn gesetzt: vor dem ersten INSERT/UPDATE werden alle in der Excel- Datei verwendeten Fremdschlüsselwerte gegen ihre Stamm-Tabellen geprüft. FK-Map wird per sys.foreign_keys aus der DB reflektiert; logische (nicht erzwungene) FKs können per -LogicalFK ergänzt werden. Aufschluss über fehlende Codes vor dem eigentlichen Schreiben spart bei großen Imports Frust.
-LogicalFK #
Type: hashtable
Optionale Hashtable mit logischen FK-Beziehungen, die in der DB NICHT als FK-Constraint deklariert sind (z.B. EULANDA-Spalten RabattGr → konRG.GR). Format: @{ RabattGr = 'konRG.GR'; WarenGr = 'konWG.GR' }. Nur wirksam in Kombination mit -PreflightFK.
-IgnoreFieldsOnUpdate #
Type: string[]
Liste von Spalten, die niemals geschrieben werden sollen. Wirkt im Default- und Supplier-Pfad gleichermaßen. Pendant zur Registry- Liste RV_IgnoreFieldsOnUpdate aus dem alten Delphi-Wizard.
-RecalcEkFromRabatt #
Type: switch
Berechnet EkNetto = Vk * (100 - Rabatt) / 100 neu, wenn die Zeile sowohl Vk als auch Rabatt enthält und Rabatt != 0 ist. Reproduziert das Verhalten aus elExchangeSupplier.pas.
-SupplierId #
Type: int
Default: 0
Kreditor.ID des Lieferanten (per Get-EulSupplierList ermittelbar). 0 oder weggelassen = eigener Stamm (Default, heutiges Verhalten). Bei >0 wird pro Zeile Resolve-EulandaArticleId aufgerufen und die Daten in ARTIKEL und KRARTIKEL getrennt geschrieben - nur für Tabelle ‘Artikel’ zulässig.
-AutoCreate #
Type: switch
Im Supplier-Modus: legt bei fehlendem Treffer den Stamm-Artikel und/oder den KrArtikel-Stub automatisch an. Ohne den Switch werden fehlende Treffer als Skip mit Begründung protokolliert.
-MatchStrategy #
Type: string[]
Default: @('Barcode'
Im Supplier-Modus: Reihenfolge der Identifier-Strategien für Resolve-EulandaArticleId. Default @('Barcode','ArtNummer').
-BarcodeColumn #
Type: string
Default: 'Barcode'
Im Supplier-Modus: Excel-Spalte mit dem Barcode/GTIN. Default ‘Barcode’.
-SupplierPriceColumns #
Type: string[]
Default: @('EkNetto'
Im Supplier-Modus: Spalten, die in KRARTIKEL geschrieben werden (Rest landet in ARTIKEL). Default reproduziert die Aufteilung aus elExchangeSupplier.pas: @('EkNetto','Vk','BruttoFlg','RabattGr', 'WarenGr','ArtMatch').
-MissingFK #
Type: string
Default: 'Stop'
Verhalten bei fehlenden Stamm-Einträgen während des Vorab-Scans:
Stop(Default): wirft Fehler mit Bericht aller fehlenden Codes, kein Schreiben.Skip: betroffene Excel-Zeilen werden übersprungen (analog Delphi-Wizard mit FSkipRabattGr/FSkipWarenGr-Skip-Listen). Wird ignoriert wenn -PreflightFK nicht gesetzt ist.
-DryRun #
Type: switch
Plant alle Schritte, schreibt aber nichts in die Datenbank.
-PassThru #
Type: switch
Liefert ein PSCustomObject mit Summary und Detail-Array zurück.
AUSGABEN #
Mit -PassThru: [PSCustomObject] mit
TotalRows (int) Anzahl Daten-Zeilen aus Excel Inserted (int) Updated (int) Skipped (int) Datensatz vorhanden bei InsertOnly oder fehlend bei UpdateOnly oder leere Schlüsselwerte Failed (int) Details (PSCustomObject[]) eine Zeile pro Excel-Zeile mit RowNumber, KeyValues, Action, Id (falls Identity), Error
BEISPIELE #
# Artikel aus Excel importieren
Import-EulFromExcel -Conn $conn `
-Path 'C:\Temp\Artikel.xlsx' `
-Table 'Artikel' `
-KeyColumns 'ArtNummer' `
-PassThru
# Erst trockenlauf, danach echter Import
Import-EulFromExcel -Conn $conn -Path 'in.xlsx' -Table 'Artikel' `
-KeyColumns 'ArtNummer' -DryRun -PassThru
# ... prüfen ...
Import-EulFromExcel -Conn $conn -Path 'in.xlsx' -Table 'Artikel' `
-KeyColumns 'ArtNummer' -OnError Skip -PassThru
HINWEISE #
Phase 4 Tier 2 – Excel-Pipeline (Import-Seite). Pendant: Export-EulToExcel. Roundtrip: Export → bearbeiten in Excel → Import zurück. Identity-Spalten aus dem Export bleiben erhalten aber werden beim Import ignoriert – nur der fachliche Schlüssel (KeyColumns) zählt.