Mit Tabellen arbeiten

Mit der Google Docs API können Sie Tabelleninhalte bearbeiten. Sie können unter anderem folgende Vorgänge ausführen:

  • Sie können Zeilen, Spalten oder ganze Tabellen einfügen und löschen.
  • Fügen Sie Inhalte in Tabellenzellen ein.
  • Inhalt aus Tabellenzellen lesen.
  • Spalteneigenschaften und Zeilenstil ändern.

Tabellen in Google Docs werden im Dokument als Typ von StructuralElement dargestellt. Jede Tabelle enthält eine Liste von Tabellenzeilen, wobei jede Zeile eine Liste von Tabellenzellen enthält. Wie bei allen Strukturelementen hat die Tabelle Start- und Endindexe, die die Position der Tabelle im Dokument angeben. Weitere Informationen zur Indexierung findest du unter Struktur. Zu den Tabelleneigenschaften gehören viele Stilelemente, z. B. Spaltenbreiten und Abstände.

Das folgende JSON-Fragment zeigt eine einfache 2x2-Tabelle, in der die meisten Details entfernt wurden:

"table": {
    "columns": 2,
    "rows": 2,
    "tableRows": [
        { "tableCells": [
                {
                    "content": [ { "paragraph": { ...  }, } ],
                },
                {
                    "content": [ { "paragraph": { ... }, } ],
                }
            ],
        },
        {
            "tableCells": [
                {
                    "content": [ { "paragraph": { ... }, } ],
                },
                {
                    "content": [ { "paragraph": { ... }, } ],
                }
            ],
        }
    ]
}

Tabellen einfügen und löschen

Um einem Dokument eine neue Tabelle hinzuzufügen, verwenden Sie InsertTableRequest. Beim Einfügen einer Tabelle müssen Sie Folgendes angeben:

  • Die Tabellendimensionen in Zeilen und Spalten.
  • Der Ort, an dem die neue Tabelle eingefügt werden soll. Dies kann ein Index innerhalb eines Segments oder das Ende eines Segments sein.

Es gibt keine explizite Methode zum Löschen von Tabellen. Wenn Sie eine Tabelle aus einem Dokument löschen möchten, behandeln Sie sie wie jeden anderen Inhalt. Verwenden Sie dazu DeleteContentRangeRequest und geben Sie einen Bereich an, der die gesamte Tabelle abdeckt.

Im folgenden Beispiel wird eine 3x3-Tabelle am Ende eines leeren Dokuments eingefügt:

Java

// Insert a table at the end of the body.
// (An empty or unspecified segmentId field indicates the document's body.)

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setInsertTable(
            new InsertTableRequest()
                .setEndOfSegmentLocation(
                    new EndOfSegmentLocation())
                .setRows(3)
                .setColumns(3)));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(DOCUMENT_ID, body).execute();

Python

  # Insert a table at the end of the body.
  # (An empty or unspecified segmentId field indicates the document's body.)

  requests = [{
      'insertTable': {
          'rows': 3,
          'columns': 3,
          'endOfSegmentLocation': {
            'segmentId': ''
          }
      },
  }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

Das entsprechende Beispiel zeigt, wie die zuvor eingefügte Tabelle gelöscht wird:

Java

// Delete a table that was inserted at the start of the body.
// (The table is the second element in the body:
//  document.getBody().getContent().get(2).)

Document document = docsService.documents().get(DOCUMENT_ID).execute();
StructuralElement table = document.getBody().getContent().get(2);

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setDeleteContentRange(
            new DeleteContentRangeRequest()
                .setRange(
                    new Range()
                        .setStartIndex(table.getStartIndex())
                        .setEndIndex(table.getEndIndex()))));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(DOCUMENT_ID, body).execute();

Python

  # Delete a table that was inserted at the start of the body.
  # (The table is the second element in the body: ['body']['content'][2].)

  document = service.documents().get(documentId=DOCUMENT_ID).execute()
  table = document['body']['content'][2]

  requests = [{
      'deleteContentRange': {
        'range': {
          'segmentId': '',
          'startIndex': table['startIndex'],
          'endIndex':   table['endIndex']
        }
      },
  }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

Da Sie eine Tabelle als gewöhnlichen Inhalt löschen, indem Sie Start- und Endindexe angeben, müssen Sie diese Indexe irgendwo herbekommen. Das Beispiel zeigt eine Möglichkeit, diese Indexe aus dem Dokumentinhalt zu extrahieren.

Zeilen einfügen und löschen

Wenn Ihr Dokument bereits eine Tabelle enthält, können Sie mit der Google Docs API Tabellenzeilen einfügen und löschen. Verwenden Sie InsertTableRowRequest, um Zeilen oberhalb oder unterhalb einer angegebenen Tabellenzelle einzufügen, und DeleteTableRowRequest, um eine Zeile zu entfernen, die sich über die angegebene Zellenposition erstreckt.

Im folgenden Beispiel wird Text in die erste Tabellenzelle einer Tabelle eingefügt und eine Tabellenzeile hinzugefügt.

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText("Hello")
        .setLocation(new Location().setIndex(5))));
requests.add(new Request().setInsertTableRow(new InsertTableRowRequest()
        .setTableCellLocation(new TableCellLocation()
                .setTableStartLocation(new Location()
                        .setIndex(2))
                .setRowIndex(1)
                .setColumnIndex(1))
        .setInsertBelow(true)));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response = docsService.documents()
        .batchUpdate(DOCUMENT_ID, body).execute();

Python

  requests = [{
        'insertText': {
          'location': {
            'index': 5
          },
          'text': 'Hello'
      }
    },
    {
      'insertTableRow': {
          'tableCellLocation': {
              'tableStartLocation': {
                      'index': 2
              },
              'rowIndex': 1,
              'columnIndex': 1
          },
          'insertBelow': 'true'
      }
    }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

Spalten einfügen und löschen

Verwenden Sie InsertTableColumnRequest, um eine Spalte in eine vorhandene Tabelle einzufügen. Sie müssen Folgendes angeben:

  • Eine Zelle, neben die eine neue Spalte eingefügt werden soll.
  • Gibt an, auf welcher Seite (links oder rechts) die neue Spalte eingefügt werden soll.

Das folgende Beispiel zeigt, wie Sie eine Spalte in die oben gezeigte 2x2-Tabelle einfügen können:

Java

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setInsertTableColumn(
            new InsertTableColumnRequest()
                .setTableCellLocation(
                    new TableCellLocation()
                        .setTableStartLocation(
                            new Location().setIndex(2))
                        .setRowIndex(0)
                        .setColumnIndex(0))
                .setInsertRight(true)));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(DOCUMENT_ID, body).execute();

Python

  requests = [{
      'insertTableColumn': {
        'tableCellLocation': {
          'tableStartLocation': {
            'segmentId': '',
            'index': 2
          },
          'rowIndex': 0,
          'columnIndex': 0
        },
        'insertRight': True
      },
  }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

Verwenden Sie DeleteTableColumnRequest, um eine Spalte zu löschen. Wie zuvor beim Einfügen einer Spalte gezeigt, geben Sie die Zellenposition in einer Zielspalte an.

Inhalt aus Tabellenzellen lesen

Eine Tabellenzelle enthält eine Liste von Strukturelementen. Jedes dieser Strukturelemente kann ein Absatz mit Text oder eine andere Art von Struktur – auch eine andere Tabelle – sein. Zum Lesen von Tabelleninhalten können Sie jedes Element rekursiv prüfen, wie unter Text extrahieren gezeigt.

Inhalte in Tabellenzellen einfügen

Wenn Sie in eine Tabellenzelle schreiben möchten, verwenden Sie InsertTextRequest in einen Index in der Zelle, die Sie aktualisieren möchten. Die Tabellenindexe werden an den aktualisierten Text angepasst. Dasselbe gilt für das Löschen von Zellentext mit DeleteContentRangeRequest.

Spalteneigenschaften ändern

Mit UpdateTableColumnPropertiesRequest können Sie die Eigenschaften einer oder mehrerer Spalten in einer Tabelle ändern.

Sie müssen den Startindex der Tabelle zusammen mit einem TableColumnProperties-Objekt angeben. Wenn Sie nur ausgewählte Spalten ändern möchten, nehmen Sie eine Liste mit Spaltennummern in die Anfrage auf. Wenn Sie alle Spalten in der Tabelle ändern möchten, geben Sie eine leere Liste an.

Im folgenden Beispiel wird die Spaltenbreite einer Tabelle aktualisiert. Alle Spalten werden auf eine Breite von 100 pt und die Breite der ersten Spalte auf 200 pt festgelegt:

Java

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setUpdateTableColumnProperties(
            new UpdateTableColumnPropertiesRequest()
                .setTableStartLocation(new Location().setIndex(2))
                .setColumnIndices(null)
                .setTableColumnProperties(
                    new TableColumnProperties()
                        .setWidthType("FIXED_WIDTH")
                        .setWidth(
                            new Dimension().setMagnitude(100d).setUnit("PT")))
                .setFields("*")));

List<Integer> columnIndices = new ArrayList<>();
columnIndices.add(0);
requests.add(
    new Request()
        .setUpdateTableColumnProperties(
            new UpdateTableColumnPropertiesRequest()
                .setTableStartLocation(new Location().setIndex(2))
                .setColumnIndices(columnIndices)
                .setTableColumnProperties(
                    new TableColumnProperties()
                        .setWidthType("FIXED_WIDTH")
                        .setWidth(
                            new Dimension().setMagnitude(200d).setUnit("PT")))
                .setFields("*")));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(DOCUMENT_ID, body).execute();

Python

  requests = [{
    'updateTableColumnProperties': {
      'tableStartLocation': {'index': 2},
      'columnIndices': [],
      'tableColumnProperties': {
        'widthType': 'FIXED_WIDTH',
        'width': {
          'magnitude': 100,
          'unit': 'PT'
        }
      },
      'fields': '*'
    },
    'updateTableColumnProperties': {
      'tableStartLocation': {'index': 2},
      'columnIndices': [0],
      'tableColumnProperties': {
        'widthType': 'FIXED_WIDTH',
        'width': {
          'magnitude': 200,
          'unit': 'PT'
        }
      },
      'fields': '*'
    },
  }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

Zeilenstile ändern

Mit UpdateTableRowsStyleRequest können Sie den Stil einer oder mehrerer Zeilen in einer Tabelle ändern.

Sie müssen den Startindex der Tabelle zusammen mit einem TableRowStyle-Objekt angeben. Wenn Sie nur ausgewählte Zeilen ändern möchten, nehmen Sie eine Liste mit Zeilennummern in die Anfrage auf. Wenn Sie alle Zeilen in der Tabelle ändern möchten, geben Sie eine leere Liste an.

Im folgenden Beispiel wird die Mindesthöhe von Zeile 3 einer Tabelle festgelegt:

Java

List<Integer> rowIndices = new ArrayList<>();
rowIndices.add(3);

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setUpdateTableRowStyle(
            new UpdateTableRowStyleRequest()
                .setTableStartLocation(new Location().setIndex(2))
                .setRowIndices(rowIndices)
                .setTableRowStyle(
                    new TableRowStyle()
                        .setMinRowHeight(
                            new Dimension().setMagnitude(18d).setUnit("PT")))
                .setFields("*")));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(DOCUMENT_ID, body).execute();

Python

  requests = [{
      'updateTableRowStyle': {
          'tableStartLocation': {'index': 2},
          'rowIndices': [3],
          'tableRowStyle': {
              'minRowHeight': {
                'magnitude': 18,
                'unit': 'PT'
              }
          },
          'fields': '*'
      },
  }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()