Freigeben über


Arbeiten mit Blättern

In diesem Thema werden die Open XML SDK-Klassen Worksheet, Chartsheetund sowie DialogSheet 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 stellen das Blattelement (<sheet/>) vor.

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/IEC 29500: 2016

Open XML SDK Worksheet-Klasse

Die Open XML SDK-Klasse Worksheet stellt das Element (<worksheet/>) dar, das worksheet im Open XML-Dateiformatschema für SpreadsheetML-Dokumente definiert ist. Verwenden Sie die Worksheet -Klasse, um einzelne <worksheet/> Elemente in einem SpreadsheetML-Dokument zu bearbeiten.

Die folgenden Informationen aus der SPEZIFIKATION ISO/IEC 29500 stellen das worksheet Element (<worksheet/>) vor.

Eine Instanz dieses Teiltyps enthält alle Daten, Formeln und Merkmale, die einem bestimmte Arbeitsblatt zugeordnet 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/IEC 29500: 2016

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 worksheet -Element 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 Element verwendet wird sheetData . Der dritte Abschnitt enthält optionale unterstützende Features wie Blattschutz und Filterinformationen. Um ein leeres Arbeitsblatt zu definieren, müssen Sie nur die worksheet Elemente und sheetData verwenden. Das sheetData Element kann leer sein.

Um neue Werte für das Arbeitsblatt zu erstellen, definieren Sie Zeilen innerhalb des sheetData Elements. Diese Zeilen enthalten Zellen mit Werten. Das row -Element definiert eine neue Zeile. Normalerweise ist die erste Zeile im sheetData die erste Zeile im sichtbaren Blatt. Innerhalb der Zeile, die Sie mithilfe des <c/> -Elements neu cells erstellen. Werte für Zellen können durch Speichern eines <v/> Elements in der Zelle bereitgestellt werden. Normalerweise enthält das <v/> -Element den aktuellen Wert der Arbeitsblattzelle. Wenn der Wert ein numerischer Wert ist, wird er 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 führen das Blattdatenelement (<sheetData/>) ein.

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

© ISO/IEC 29500: 2016

Row-Klasse

Mit den folgenden Informationen aus der SPEZIFIKATION ISO/IEC 29500 wird das Zeilenelement (<row/>) eingeführt.

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/IEC 29500: 2016

Cell-Klasse

Die folgenden Informationen aus der SPEZIFIKATION ISO/IEC 29500 stellen das Zellelement (<c/>) vor.

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". Zum Optimieren von Lade-/Speichervorgängen müssen Standarddatenwerte nicht ausgegeben werden.

© ISO/IEC 29500: 2016

CellValue-Klasse

Die folgenden Informationen aus der ISO/IEC 29500-Spezifikation stellen das Zellwertelement (<v/>) vor.

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 externer Link als Inhalt des v-Knotens der Zelle zu sehen, sehen Sie stattdessen einen nullbasierten Index in der freigegebenen Zeichenfolgentabelle, 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. Wenn der Datentyp string ist, handelt es sich um einen Index und nicht um einen numerischen Wert.

© ISO/IEC 29500: 2016

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 Zelltabelle an Position A1 eine Zelle hinzugefügt. Dann wird der Wert der Zelle in A1 gleich dem numerischen Wert 100 festgelegt.

static void CreateSpreadsheetWorkbook(string filepath)
{
    // Use 'using' block to ensure proper disposal of the document
    using (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(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 = 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);
    }
}