Kombinieren von Daten aus mehreren Excel-Tabellen: Ein Leitfaden

Durch die Kombination von Daten aus mehreren Tabellen in einer einzigen Tabelle können Datenanalyse und Berichterstellung vereinfacht werden. In diesem Artikel werden wir zwei Variationen eines in TypeScript geschriebenen Skripts untersuchen, das diese Aufgabe erfüllt. Das Beispielskript geht davon aus, dass alle Tabellen in der Excel-Datei dieselbe Struktur haben. Der Vorteil von einem Skript im Vergleich zu einem Makro ist, dass dieses Plattform unabhängig  ist, mehr Möglichkeiten bietet und in die Umgebung von Microsoft 365 integriert ist. Mehr dazu ganz am Schluss.

Einrichtung: tables-copy

Bevor wir uns mit dem Code befassen, richten wir das Szenario mit einer Beispiel-Excel-Datei ein. Diese Arbeitsmappe enthält die vom Skript erwarteten Daten, Objekte und Formatierungen. Es dient als Grundlage für beide Drehbuchvarianten.

Beispielcode: Kombinieren Sie Daten aus mehreren Excel-Tabellen in einer einzigen Tabelle

Überblick

Das erste Skript kombiniert alle Tabellen innerhalb der Excel-Datei, während das zweite Skript selektiv Tabellen aus bestimmten Arbeitsblättern kombiniert. Der TypeScript-Code nutzt die ExcelScript-API, um Excel-Arbeitsmappen programmgesteuert zu bearbeiten.

Nehmen wir an, Sie haben für das erste Skript diese 4 Blätter mit Tabellen und jetzt werden wir diese Tabellen als eine auf dem Blatt „Kombinieren“ zusammenfassen. Kopieren Sie dazu einfach das folgende Skript, fügen Sie es in Ihren Code-Editor ein, benennen Sie das Skript um, speichern Sie es und klicken Sie dann auf die Schaltfläche „Ausführen“.

sample table

Erstes Skript: Alle Tabellen kombinieren

function main(workbook: ExcelScript.Workbook) {
  // Delete the "Combined" worksheet, if it's present.
  workbook.getWorksheet('Combined')?.delete();

  // Create a new worksheet named "Combined" for the combined table.
  const newSheet = workbook.addWorksheet('Combined');
  
  // Get the header values for the first table in the workbook.
  // This also saves the table list before we add the new, combined table.
  const tables = workbook.getTables();    
  const headerValues = tables[0].getHeaderRowRange().getTexts();
  console.log(headerValues);

  // Copy the headers on a new worksheet to an equal-sized range.
  const targetRange = newSheet.getRange('A1').getResizedRange(headerValues.length-1, headerValues[0].length-1);
  targetRange.setValues(headerValues);

  // Add the data from each table in the workbook to the new table.
  const combinedTable = newSheet.addTable(targetRange.getAddress(), true);
  for (let table of tables) {      
    let dataValues = table.getRangeBetweenHeaderAndTotal().getTexts();
    let rowCount = table.getRowCount();

    // If the table is not empty, add its rows to the combined table.
    if (rowCount > 0) {
      combinedTable.addRows(-1, dataValues);
    }
  }
}

Ausgabe des ersten Skripts

Nehmen wir an, für das erste Skript haben Sie diese 4 Blätter mit Tabellen und jetzt werden wir diese Tabellen als eine auf dem Blatt „Kombinieren“ zusammenfassen.

Zweites Skript: Tabellen aus ausgewählten Arbeitsblättern kombinieren

Für das zweite Skript können Sie festlegen, aus welchen Arbeitsblattnamen Tabellen abgerufen werden sollen. Für dieses Beispiel haben wir Sheet1, Sheet2, Sheet3

function main(workbook: ExcelScript.Workbook) {
  // Set the worksheet names to get tables from.
  const sheetNames = ['Sheet1', 'Sheet2', 'Sheet3'];
    
  // Delete the "Combined" worksheet, if it's present.
  workbook.getWorksheet('Combined')?.delete();

  // Create a new worksheet named "Combined" for the combined table.
  const newSheet = workbook.addWorksheet('Combined');

  // Create a new table with the same headers as the other tables.
  const headerValues = workbook.getWorksheet(sheetNames[0]).getTables()[0].getHeaderRowRange().getTexts();
  const targetRange = newSheet.getRange('A1').getResizedRange(headerValues.length-1, headerValues[0].length-1);
  targetRange.setValues(headerValues);
  const combinedTable = newSheet.addTable(targetRange.getAddress(), true);

  // Go through each listed worksheet and get their tables.
  sheetNames.forEach((sheet) => {
    const tables = workbook.getWorksheet(sheet).getTables();     
    for (let table of tables) {
      // Get the rows from the tables.
      let dataValues = table.getRangeBetweenHeaderAndTotal().getTexts();
      let rowCount = table.getRowCount();

      // If there's data in the table, add it to the combined table.
      if (rowCount > 0) {
          combinedTable.addRows(-1, dataValues);
      }
    }
  });
}

Mit solchen Skripts können Benutzer ihre Arbeitsabläufe optimieren. Doch was ist der Unterschied zwischen einem Makro und einem Office Skript (TypeScript)?

👉 Plattformunabhängigkeit:

Office Scripts können in der Webversion von Microsoft 365 sowie in den Desktopversionen von Excel verwendet werden, was die Flexibilität und die Möglichkeit zur Zusammenarbeit über verschiedene Plattformen hinweg erhöht.

👉 Moderne Programmiersprache und Typsicherheit:

TypeScript bietet moderne Funktionen und eine höhere Typsicherheit, was zu einer robusteren und leichter wartbaren Codebasis führt. Dies ermöglicht eine effizientere Entwicklung und Fehlererkennung während des Schreibens des Codes.

👉 Umfassende Integration in Microsoft 365:

Office Scripts sind eng in die Microsoft 365-Plattform integriert und ermöglichen eine nahtlose Automatisierung von Aufgaben über verschiedene Anwendungen hinweg. Dies ermöglicht eine effiziente Zusammenarbeit und Automatisierung von Workflows, die über die Funktionen von Excel hinausgehen.

Benötigen Sie einen Skript-Programmierer?

Wir als exact construct programmieren mit einem Team von rd. 20 Mitarbeitern seit über 10 Jahren Excel-Tools. Wir sind ein Nischenanbieter der spezialisiert auf Makros/VBA-Codes ist. Daneben unterstützen wir auch als 3rd Level Support die IT-Abteilungen rund um Probleme bei MS Office (Excel, Word, PowerPoint, etc.).
Haben Sie ein Excel-Problem? Benötigen Sie einen Makro-Programmierer? Rufen Sie uns unverbindlich an +41 52 511 05 25 oder kontaktieren Sie uns via Kontaktformular.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen