Freigeben über


Arbeiten mit Blättern

In diesem Thema werden die Open XML SDK-Klassen Worksheet, Chartsheet und DialogSheet sowie deren Beziehung zum SpreadsheetML-Schema des Open XML-Dateiformats erläutert. Weitere Informationen zur Gesamtstruktur der Teile und Elemente, aus denen ein SpreadsheetML-Dokument besteht, finden Sie unter Struktur eines SpreadsheetML-Dokuments.

Blätter in SpreadsheetML

Die folgenden Informationen aus der Spezifikation ISO/IEC 29500 bieten eine Einführung in das sheet-Element (<sheet>).

Blätter sind die zentralen Strukturen innerhalb einer Arbeitsmappe und sind der Ort, an dem der Benutzer den Großteil seiner Arbeitsblattarbeit erledigt. Der häufigste Blatttyp ist das Arbeitsblatt, das als Raster von Zellen dargestellt wird. Arbeitsblattzellen können Text, Zahlen, Datumsangaben und Formeln enthalten. Zellen können ebenfalls formatiert werden. Arbeitsmappen enthalten in der Regel mehr als ein Blatt. Um die Analyse von Daten zu unterstützen und fundierte Entscheidungen zu treffen, implementieren Tabellenkalkulationsanwendungen häufig Features und Objekte, mit denen Informationen berechnet, sortiert, gefiltert, organisiert und grafisch angezeigt werden können. Da diese Features häufig sehr eng mit dem Tabellentabellenraster verbunden sind, sind diese auch in der Blattdefinition auf dem Datenträger enthalten.

Andere Blatttypen sind z. B. Diagramm- und Dialogblätter.

© ISO/IEC29500: 2008.

Open XML SDK Worksheet-Klasse

DieWorksheet-Klasse des Open XML SDK stellt das Arbeitsblattelementdar><, das im Open XML-Dateiformatschema für SpreadsheetML-Dokumente definiert ist. Verwenden Sie die Worksheet-Klasse zum Bearbeiten einzelner <Worksheet>-Elemente in einem SpreadsheetML-Dokument.

Die folgenden Informationen aus der Spezifikation ISO/IEC 29500 bieten eine Einführung in das worksheet-Element (<worksheet>).

Eine Instanz dieses Teiletyps enthält alle Daten, Formeln und Merkmale, die mit einem bestimmten Arbeitsblatt verknüpft sind.

Ein Paket muss exakt einen Arbeitsblattteil pro Arbeitsblatt enthalten.

Insbesondere das id-Attribut für das Blattelement muss auf den gewünschten Arbeitsblattteil verweisen.

Das Stammelement eines Teils dieses Inhaltstyps muss worksheet sein.

Die folgenden Informationen aus der Spezifikation ISO/IEC 29500 bieten eine Einführung in das Mindestszenario für worksheet.

Das kleinstmögliche (leere) Blatt ist wie folgt definiert:

<worksheet>
    <sheetData/>
</worksheet>

The empty sheetData collection represents an empty grid; this element is required. As defined in the schema, some optional sheet property collections can appear before sheetData, and some can appear after. To simplify the logic required to insert a new sheetData collection into an existing (but empty) sheet, the sheetData collection is required, even when empty.

© ISO/IEC29500: 2008.

Ein typisches Arbeitsblatt enthält mindestens ein Arbeitsblatt. Das Arbeitsblatt enthält eine tabellenähnliche Struktur zum Definieren von Daten, die durch das sheetData-Element dargestellt wird. Ein Blatt, das Daten enthält, verwendet das Arbeitsblattelement als Stammelement zum Definieren von Arbeitsblättern. Innerhalb eines Arbeitsblatts werden die Daten in drei verschiedene Abschnitte aufgeteilt. Der erste Abschnitt enthält optionale Blatteigenschaften. Der zweite Abschnitt enthält die Daten, wobei das erforderliche sheetData-Element verwendet wird. Der dritte Abschnitt enthält optionale unterstützende Features wie Blattschutz und Filterinformationen. Um ein leeres Arbeitsblatt zu definieren, müssen Sie nur die Elemente worksheet und sheetData verwenden. Das sheetData-Element kann leer sein.

Zum Erstellen neuer Werte für das das Arbeitsblatt definieren Sie Zeilen innerhalb des sheetData-Elements. Diese Zeilen enthalten Zellen mit Werten. Mit dem row-Element wird eine neue Zeile definiert. Normalerweise ist die erste Zeile im SheetData die erste Zeile im sichtbaren Blatt. In der Zeile erstellen Sie neue Zellen mithilfe des <c>-Elements. Werte für Zellen können durch das Speichern eines <v>-Elements innerhalb der Zelle bereitgestellt werden. In der Regel enthält das <v>-Element den aktuellen Wert der Arbeitsblattzelle. Wenn der Wert eine Zahl ist, wird diese direkt im <v>-Element in der XML-Datei gespeichert. Ist der Wert eine Zeichenfolge, wird er in einer gemeinsam genutzten Zeichenfolgentabelle gespeichert. Weitere Informationen zur Verwendung der freigegebenen Zeichenfolgentabelle zum Speichern von Zeichenfolgenwerten finden Sie unter Arbeiten mit der freigegebenen Zeichenfolgentabelle.

In der folgenden Tabelle sind die allgemeinen Open XML SDK-Klassen aufgeführt, die beim Arbeiten mit der Worksheet-Klasse verwendet werden.

SpreadsheetML-Element Open XML SDK-Klasse
sheetData SheetData
row Row
c Cell
v CellValue

Weitere Informationen zu optionalen Tabellenkalkulationselementen, z. B. zu Blatteigenschaften und unterstützenden Blattfunktionen, finden Sie in der ISO/IEC 29500-Spezifikation.

SheetData-Klasse

Die folgenden Informationen aus der Spezifikation ISO/IEC 29500 bieten eine Einführung in das sheet data-Element (<sheetData>).

Die Zelltabelle ist die Kernstruktur eines Arbeitsblatts. Es besteht aus allen Texten, Zahlen und Formeln im Raster.

© ISO/IEC29500: 2008.

Row-Klasse

Die folgenden Informationen aus der Spezifikation ISO/IEC 29500 bieten eine Einführung in das row-Element (<row>).

Die Zellen in der Zellentabelle sind in Zeilen organisiert. Jede Zeile verfügt über einen Index (Attribut r), sodass leere Zeilen nicht ausgeschrieben werden müssen. Jede Zeile gibt die Anzahl der dafür definierten Zellen sowie ihre relative Position auf dem Blatt an. In diesem Beispiel ist die erste Datenzeile die Zeile 2.

© ISO/IEC29500: 2008.

Zellenklasse

Die folgenden Informationen aus der Spezifikation ISO/IEC 29500 bieten eine Einführung in das cell-Element (<c>).

Die Zelle selbst wird mithilfe der Auflistung c ausgedrückt. Jede Zelle gibt ihre Position im Raster mithilfe der A1-Formatverweisnotation an. Eine Zelle kann auch eine Formatvorlagen-ID (Attribut s) und einen Datentyp (Attribut t) angeben. Die Zellentypen sind "Zeichenfolge", "Zahl" und "Boolesch". In order to optimize load/save operations, default data values are not written out.

© ISO/IEC29500: 2008.

CellValue-Klasse

Die folgenden Informationen aus der Spezifikation ISO/IEC 29500 bieten eine Einführung in das cell value-Element (<v>).

Zellen enthalten Werte unabhängig davon, ob die Werte direkt eingegeben wurden (die Zelle A2 in unserem Beispiel hat beispielsweise den Wert "Externe Verknüpfung:") oder das Ergebnis einer Berechnung sind (z. B. weist die Zelle B3 in unserem Beispiel die Formel B2+1 auf).

Zeichenfolgenwerte in einer Zelle werden nur in der Zellentabelle gespeichert, wenn sie das Ergebnis einer Berechnung sind. Anstatt dass Externe Verknüpfung: als Inhalt des Knotens v der Zelle angezeigt wird, wird ein auf 0 basierender Index in der gemeinsam genutzten Zeichenfolgentabelle angezeigt, in der diese Zeichenfolge eindeutig gespeichert ist. Dies erfolgt zum Optimieren der Leistung beim Laden und Speichern und zum Verringern der Duplizierung von Informationen. Zum Bestimmen, ob die 0 in v eine Zahl oder ein Index für eine Zeichenfolge ist, muss der Datentyp der Zelle untersucht werden. When the data type indicates string, then it is an index and not a numeric value.

© ISO/IEC29500: 2008.

Open XML SDK-Codebeispiel

Im folgenden Codebeispiel wird ein Tabellenkalkulationsdokument mit dem angegebenen Dateinamen erstellt und eine Worksheet-Klasse instanziiert. Anschließend wird eine Zeile hinzugefügt und der Zellentabelle an Position A1 eine Zelle hinzugefügt. Dann wird der Wert der Zelle in A1 gleich dem numerischen Wert 100 festgelegt.

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

CreateSpreadsheetWorkbook(args[0]);

static void CreateSpreadsheetWorkbook(string filepath)
{
    // Create a spreadsheet document by supplying the filepath.
    // By default, AutoSave = true, Editable = true, and Type = xlsx.
    SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);

    // Add a WorkbookPart to the document.
    WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart();
    workbookPart.Workbook = new Workbook();

    // Add a WorksheetPart to the WorkbookPart.
    WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
    worksheetPart.Worksheet = new Worksheet(new SheetData());

    // Add Sheets to the Workbook.
    Sheets sheets = workbookPart.Workbook.AppendChild<Sheets>(new Sheets());

    // Append a new worksheet and associate it with the workbook.
    Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
    sheets.Append(sheet);

    // Get the sheetData cell table.
    SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>() ?? worksheetPart.Worksheet.AppendChild(new SheetData());

    // Add a row to the cell table.
    Row row;
    row = new Row() { RowIndex = 1 };
    sheetData.Append(row);

    // In the new row, find the column location to insert a cell in A1.  
    Cell? refCell = null;

    foreach (Cell cell in row.Elements<Cell>())
    {
        if (string.Compare(cell.CellReference?.Value, "A1", true) > 0)
        {
            refCell = cell;
            break;
        }
    }

    // Add the cell to the cell table at A1.
    Cell newCell = new Cell() { CellReference = "A1" };
    row.InsertBefore(newCell, refCell);

    // Set the cell value to be a numeric value of 100.
    newCell.CellValue = new CellValue("100");
    newCell.DataType = new EnumValue<CellValues>(CellValues.Number);

    // Dispose the document.
    spreadsheetDocument.Dispose();
}