Beispiel: Konvertieren von Excel-Zeilen in XML-Dateien
Excel-Dateien können aus mehreren Arbeitsblättern mit jeweils unterschiedlicher Struktur bestehen, was bedeutet, dass die Anzahl und Reihenfolge von Spalten sich voneinander unterscheiden kann. Es gibt allerdings auch Excel-Dateien, bei denen alle Arbeitsblätter dieselbe Struktur haben und bei denen sich nur der Name und die Daten des Arbeitsblatts voneinander unterscheiden.
Sie können mit MapForce ein Mapping so konfigurieren, dass es Daten in jedem oder oben erwähnten Fälle flexible aus Arbeitsblättern extrahiert:
1.Sie können im Mapping jedes einzelne Excel-Arbeitsblattt als separate Struktur anzeigen. Diese Methode eignet sich, wenn die einzelnen Excel-Arbeitsblätter eine unterschiedliche Struktur aufweisen. Sie haben dadurch die Flexibilität, Daten aus jeder beliebigen Zelle jedes Arbeitsblatts in Ihrer Excel-Quelldatei zu mappen.
2.Sie können alle Excel-Arbeitsblätter in der Datei so behandeln, als würde es sich dabei um ein einziges Arbeitsblatt handeln. Diese Methode eignet sich nur dann, wenn alle Arbeitsblätter dieselbe Struktur haben; sie hat den Vorteil, dass Sie im Mapping weniger Verbindungen ziehen müssen. Da die Struktur der einzelnen Arbeitsblätter ja als identisch angenommen wird, ziehen Sie, unabhängig davon, in welchem Arbeitsblatt die Spalten vorkommen, nur einmal Verbindungen von den einzelnen Spalten aus.
So konfigurieren Sie eine Excel-Komponente für eine der oben beschriebenen beiden Methoden:
1.Fügen Sie die Excel-Komponente mit dem Menübefehl Einfügen | Excel 2007+-Datei hinzu, siehe auch Hinzufügen von Microsoft Excel-Dateien als Mapping-Komponenten ).
2.Klicken Sie neben dem ersten Arbeitsblatt auf die Schaltfläche . Daraufhin erscheint das folgende Dialogfeld:
3.Wählen Sie eine der folgenden Methoden:
a.Um die Struktur der einzelnen Arbeitsblätter separat anzuzeigen, stellen Sie sicher, dass das Kontrollkästchen Arbeitsblätter nach Namen anzeigen aktiviert ist. Dies ist die Standardoption.
b.Um alle Arbeitblätter als eine einzige mapbare Komponente anzuzeigen, deaktivieren Sie das Kontrollkästchen Arbeitsblätter nach Namen anzeigen.
Unter dem folgenden Pfad finden Sie eine Demo-Mapping-Design-Datei zur Veranschaulichung der beiden Methoden: <Dokumente>\Altova\MapForce2025\MapForceExamples\ConvertExcelRows.mfd. In diesem Mapping werden zwei verschiedene Strategien, Daten aus einer Excel-Datei auszulesen, gezeigt. Da mit diesem Mapping mehrere nicht miteinander in Zusammenhang stehende Ausgaben erzeugt werden, wird in der Titelleiste jeder Zielkomponente die Schaltfläche Vorschau angezeigt. Denken Sie daran, zuerst auf diese Schaltfläche zu klicken, bevor Sie auf das Fenster Ausgabe klicken, um eine Vorschau auf die entsprechende Ausgabedatei zu sehen.
Die Excel-Quelldatei hat den Namen Altova.xlsx und besteht aus zwei Arbeitsblättern: "Admin" und "Development". Beachten Sie, dass die Struktur der einzelnen Arbeitsblätter identisch ist. Nur die Daten in den Arbeitsblättern unterscheiden sich (aus diesem Grund kann der Aufruf auf verschiedene Arten erfolgen).
Im oberen Teil des Mappings sehen Sie, wie Daten aus der Excel-Datei ausgelesen werden, wobei jedes Arbeitsblatt als separate Struktur behandelt wird. Wenn Sie neben dem Datenelement Admin auf die Schaltfläche klicken, sehen Sie dass das Kontrollkästchen Arbeitsblätter nach Namen anzeigen ausgewählt wurde. Dadurch werden die beiden Arbeitsblätter "Admin" und "Development" in der Quellkomponente explizit als Child-Elemente von Arbeitsmappe angezeigt.
ConvertExcelRows.mfd (Teil 1)
Im obigen Mapping werden Daten aus beiden Excel-Arbeitsblättern in XML-Dateien konvertiert. Für jeden Person-Datensatz aus jeder Zeile in den einzelnen Quell-Arbeitsblättern muss eine separate XML-Datei generiert werden. Der Dateiname muss den Abteilungsnamen von Department identifizieren und eine numerische ID haben. So werden z.B. in der Datei Admin1.xml die Informationen zur ersten Person (Zeile) im Arbeitsblatt "Admin" gespeichert, usw. Dies wurde folgendermaßen bewerkstelligt:
1.Die Funktion concat erzeugt die Dateinamen für die einzelnen XML-Zieldateien. Sie verbindet die folgenden Elemente miteinander (in der folgenden Reihenfolge): den Namen der Abteilung (Department), die Excel-Zeilennummer und den String ".xml".
2.Aufgrund der Verbindung vom Ergebnis der concat-Funktion mit dem Ziel-Datenelement Datei:<dynamisch> wird zur Mapping-Laufzeit für jedes Datenelement in der eingehenden Datenelementsequenz eine neue Datei generiert. Die eingehende Sequenz in diesem Beispiel enthält alle Zeilen des Excel-Quell-Arbeitsblatts; daher wird für jede Excel-Zeile eine neue XML-Datei generiert.
Um eine Zielkomponente so zu konfigurieren, dass Dateinamen dynamisch generiert werden, klicken Sie auf die Schaltfläche Datei/String und aktivieren Sie die Option Über das Mapping bereitgestellte dynamische Dateinamen verwenden. Nähere Informationen dazu finden Sie unter Dynamische Verarbeitung mehrerer Input- oder Output-Dateien.
Unten sehen Sie den zweiten Teil des Mappings ConvertExcelRows.mfd. Mit diesem Teil des Mappings erzielen Sie genau das gleiche Ergebnis wie mit Teil 1, doch ist dieser Teil kürzer. Beachten Sie, dass dieser Teil erheblich weniger Mapping-Verbindungen aufweist.
ConvertExcelRows.mfd (Teil 2)
Die Mapping-Logik ist beinahe dieselbe wie die des zuvor beschriebenen Mappings:
1.Für jede Zeile in jedem Quell-Arbeitsblatt wird in der Zielkomponente ein einziges Person-Datenelement erstellt.
2.Die concat-Funktion generiert die Namen der einzelnen Zieldateien.
3.Für die Zielkomponente wurde eine dynamische Generierung von Dateinamen ausgewählt.
Der einzige Unterschied ist, dass implizit über alle Arbeitsblätter in der Excel-Quelldatei iteriert wird. Es besteht keine Notwendigkeit, die Struktur der einzelnen Arbeitsblätter separat anzuzeigen und dafür separate Mapping-Verbindungen zu ziehen. Der Grund dafür ist, dass die Excel-Quellkomponente so konfiguriert wurde, dass sie alle Arbeitsblätter als ein einziges behandelt. Wenn Sie neben dem Datenelement Arbeitsblätter auf die Schaltfläche klicken, sehen Sie, dass das Kontrollkästchen Arbeitsblätter nach Namen anzeigen nicht aktiviert ist.
Sie haben in diesem Kapitel nun die Unterschiede zwischen dem Mapping von Daten aus einzelnen Excel-Arbeitsblättern im Gegensatz zu einem Mapping, in dem alle Arbeitsblätter als ein einziges behandelt werden, gesehen. Beachten Sie, dass die zweite Methode voraussetzt, dass die Struktur aller Arbeitsblätter dieselbe ist. In diesem Beispiel wird angenommen, dass in der ersten Spalte jedes Arbeitsblatts der Vorname der Person (First Name), in der zweiten der Nachname (Last Name) der Person, usw. gespeichert sind.