Freigeben über


Ändern von Text in einer Tabelle in einem Textverarbeitungsdokument

In diesem Thema wird gezeigt, wie Sie das Open XML SDK für Office verwenden, um Text in einer Tabelle in einem vorhandenen Textverarbeitungsdokument programmgesteuert zu ändern.

Öffnen des vorhandenen Dokuments

Um ein vorhandenes Dokument zu öffnen, instanziieren Sie die WordprocessingDocument -Klasse wie in der folgenden using Anweisung gezeigt. Öffnen Sie in derselben Anweisung die Textverarbeitungsdatei an der angegebenen filepath , indem Sie die Open -Methode verwenden, wobei der boolesche Parameter auf true festgelegt ist, um die Bearbeitung des Dokuments zu ermöglichen.

using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, true))

Mit v3.0.0 und höher wurde die Close() -Methode entfernt, um sich auf die using-Anweisung zu verlassen. Dadurch wird sichergestellt, dass die Dispose() -Methode automatisch aufgerufen wird, wenn die schließende Klammer erreicht ist. Der Block, der auf die using-Anweisung folgt, richtet einen Bereich für das Objekt ein, das in der using-Anweisung erstellt oder benannt wird. Da die WordprocessingDocument -Klasse im Open XML SDK das Objekt als Teil der IDisposable Implementierung automatisch speichert und schließt und da Dispose() automatisch aufgerufen wird, wenn Sie den Block beenden, müssen Sie oder Dispose() nicht explizit aufrufenSave(), solange Sie eine using -Anweisung verwenden.

Struktur einer Tabelle

Die grundlegende Dokumentstruktur eines WordProcessingML Dokuments besteht aus den document Elementen und body gefolgt von einem oder mehreren Elementen auf Blockebene, z p. B. , die einen Absatz darstellen. Ein Absatz enthält mindestens ein r Element. Steht r für "run", bei dem es sich um einen Textbereich mit einem gemeinsamen Satz von Eigenschaften handelt, z. B. formatierung. Eine Ausführung enthält mindestens ein t Element. Das t -Element enthält einen Textbereich.

Das Dokument kann, wie in diesem Beispiel, eine Tabelle enthalten. Ein table ist ein Satz von Absätzen (und anderen Inhalten auf Blockebene), die in rows und columnsangeordnet sind. Tabellen in WordprocessingML werden über das tbl -Element definiert, das analog zum HTML-Tabellentag ist. Betrachten Sie eine leere Tabelle mit einer Zelle (d. h. eine Tabelle mit einer Zeile und einer Spalte) und einem Rahmen von 1 Punkt auf allen Seiten. Diese Tabelle wird durch das folgende WordprocessingML Codebeispiel dargestellt.

    <w:tbl>
      <w:tblPr>
        <w:tblW w:w="5000" w:type="pct"/>
        <w:tblBorders>
          <w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/>
          <w:left w:val="single" w:sz="4 w:space="0" w:color="auto"/>
          <w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/>
          <w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/>
        </w:tblBorders>
      </w:tblPr>
      <w:tblGrid>
        <w:gridCol w:w="10296"/>
      </w:tblGrid>
      <w:tr>
        <w:tc>
          <w:tcPr>
            <w:tcW w:w="0" w:type="auto"/>
          </w:tcPr>
          <w:p/>
        </w:tc>
      </w:tr>
    </w:tbl>

Diese Tabelle gibt tabellenweite Eigenschaften von 100 % der Seitenbreite mithilfe tblW des -Elements an, eine Reihe von Tabellenrahmen, die das tblBorders -Element verwenden, das Tabellenraster, das eine Reihe von freigegebenen vertikalen Kanten innerhalb der Tabelle mit dem tblGrid -Element definiert, und eine einzelne Tabellenzeile mit dem tr -Element.

Funktionsweise des Beispielcodes

Nachdem Sie das Dokument in der using -Anweisung geöffnet haben, finden Sie im Beispielcode die erste Tabelle im Dokument. Dann wird die zweite Zeile in der Tabelle bestimmt, indem die Zeile mit dem Index 1 gesucht wird. Anschließend wird die dritte Zelle in dieser Zeile, deren Index 2 ist gesucht, wie im folgenden Codebeispiel gezeigt wird.

// Find the first table in the document.
Table table = doc.MainDocumentPart.Document.Body.Elements<Table>().First();

// Find the second row in the table.
TableRow row = table.Elements<TableRow>().ElementAt(1);

// Find the third cell in the row.
TableCell cell = row.Elements<TableCell>().ElementAt(2);

Nachdem Sie die Zielzelle bestimmt haben, suchen Sie den ersten Lauf im ersten Absatz der Zelle und ersetzen den Text durch den übergebenen Text. Im folgenden Codebeispiel werden diese Aktionen veranschaulicht.

// Find the first paragraph in the table cell.
Paragraph p = cell.Elements<Paragraph>().First();

// Find the first run in the paragraph.
Run r = p.Elements<Run>().First();

// Set the text for the run.
Text t = r.Elements<Text>().First();
t.Text = txt;

Ändern von Text in einer Zelle in einer Tabelle

Das folgende Codebeispiel zeigt, wie Sie den Text in der angegebenen Tabellenzelle in einem Textverarbeitungsdokument ändern. Im Codebeispiel wird erwartet, dass das Dokument, dessen Dateiname und Pfad als Argument an die ChangeTextInCell Methode übergeben werden, eine Tabelle enthält. Ferner wird erwartet, dass die Tabelle mindestens zwei Zeilen und drei Spalten hat und dass die Tabelle Text in der Zelle enthält, die sich in der zweiten Zeile in der dritten Spalte befindet. Wenn Sie die ChangeTextInCell -Methode in Ihrem Programm aufrufen, wird der Text in der Zelle an der angegebenen Position durch den Text ersetzt, den Sie als zweites Argument an die ChangeTextInCell Methode übergeben.

Beliebiger Text Beliebiger Text Beliebiger Text
Beliebiger Text Beliebiger Text Der Text aus dem zweiten Argument

Beispielcode

Die ChangeTextInCell -Methode ändert den Text in der zweiten Zeile und der dritten Spalte der ersten Tabelle in der Datei. Beim Aufruf übergeben Sie einen vollständigen Pfad zu der Datei als ersten Parameter und den zu verwendenden Text als zweiten Parameter. Der folgende Aufruf der ChangeTextInCell -Methode ändert z. B. den Text in der angegebenen Zelle in "Der Text aus dem API-Beispiel".

ChangeTextInCell(args[0], args[1]);

Nachstehend ist das vollständige Codebeispiel aufgeführt.

// Change the text in a table in a word processing document.
static void ChangeTextInCell(string filePath, string txt)
{
    // Use the file name and path passed in as an argument to 
    // open an existing document.
    using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, true))
    {
        if (doc.MainDocumentPart is null || doc.MainDocumentPart.Document.Body is null)
        {
            throw new ArgumentNullException("MainDocumentPart and/or Body is null.");
        }

        // Find the first table in the document.
        Table table = doc.MainDocumentPart.Document.Body.Elements<Table>().First();

        // Find the second row in the table.
        TableRow row = table.Elements<TableRow>().ElementAt(1);

        // Find the third cell in the row.
        TableCell cell = row.Elements<TableCell>().ElementAt(2);
        // Find the first paragraph in the table cell.
        Paragraph p = cell.Elements<Paragraph>().First();

        // Find the first run in the paragraph.
        Run r = p.Elements<Run>().First();

        // Set the text for the run.
        Text t = r.Elements<Text>().First();
        t.Text = txt;
    }
}

Siehe auch

Referenz zur Open XML SDK-Klassenbibliothek

Gewusst wie: Ändern von Text in einer Tabelle in einem Textverarbeitungsdokument

Sprachintegrierte Abfrage (Language-Integrated Query, LINQ)

Erweiterungsmethoden (C#-Programmierhandbuch)

Erweiterungsmethoden (Visual Basic)