Import Eul From Excel
Zuletzt geändert: 24.05.2026 08:59

Übersicht

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.