Mit Tabellen arbeiten

Mit der Google Docs API können Sie Tabelleninhalte bearbeiten. Die Operationen, die Sie Folgendes ausführen:

  • 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 sind dargestellt als Typ von StructuralElement im Dokument. Jede Tabelle enthält eine Liste mit Tabellenzeilen wobei jede Zeile eine Liste mit Tabellenzellen. Wie bei allen Strukturelemente enthält, enthält die Tabelle Start- und Endindexe gibt die Tabellenposition im Dokument an. Struktur ansehen finden Sie weitere Informationen zur Indexierung. Tabelleneigenschaften umfassen viele Stilelemente. wie Spaltenbreiten und Innenabstände.

Das folgende JSON-Fragment zeigt eine einfache 2 x 2-Tabelle mit den meisten Details entfernt:

"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 die Methode InsertTableRequest. Beim Einfügen einer Tabelle müssen Sie Folgendes angeben:

  • Die Tabellendimensionen in Zeilen und Spalten.
  • Die Stelle, an der die neue Tabelle eingefügt wird. Dabei kann es sich um einen Index innerhalb eines segment Ende eines Segments. Beide sollten die ID des angegebenen Tabs enthalten.

Es gibt keine explizite Methode zum Löschen von Tabellen. Um eine Tabelle aus einem behandelt, wie jeden anderen Inhalt: Verwenden Sie das DeleteContentRangeRequest, Sie geben einen Bereich an, der die gesamte Tabelle abdeckt.

Im folgenden Beispiel wird am Ende eines leeren Dokuments eine 3x3-Tabelle 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().setTabId(TAB_ID))
                .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': '',
          'tabId': TAB_ID
        }
    },
}
]

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

Das entsprechende Beispiel zeigt, wie Sie die zuvor eingefügte Tabelle löschen:

Java

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

Document document = docsService.documents().get(DOCUMENT_ID).setIncludeTabsContent(true).execute();
String tabId = document.getTabs()[0].getTabProperties().getTabId();
DocumentTab documentTab = document.getTabs()[0].getDocumentTab();
StructuralElement table = documentTab.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())
                        .setTabId(tabId))));

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 of the first tab.
# (The table is the second element in the body: ['body']['content'][2].)

document = service.documents().get(documentId=DOCUMENT_ID, includeTabsContent=True).execute()
tab_id = document['tabs'][0]['tabProperties']['tabId']
document_tab = document['tabs'][0]['documentTab']
table = document_tab['body']['content'][2]

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

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

Weil Sie eine Tabelle als gewöhnlichen Inhalt löschen, indem Sie Start und Ende angeben Sie müssen sie 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 das Einfügen Tabellenzeilen löschen. Verwenden Sie die Methode InsertTableRowRequest um Zeilen oberhalb oder unterhalb eines angegebene Tabellenzelle und die 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.

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText("Hello")
        .setLocation(new Location().setIndex(5).setTabId(TAB_ID))));
requests.add(new Request().setInsertTableRow(new InsertTableRowRequest()
        .setTableCellLocation(new TableCellLocation()
                .setTableStartLocation(new Location()
                        .setIndex(2).setTabId(TAB_ID))
                .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,
          'tabId': TAB_ID
        },
        'text': 'Hello'
    }
  },
  {
    'insertTableRow': {
        'tableCellLocation': {
            'tableStartLocation': {
                'index': 2,
                'tabId': TAB_ID
            },
            'rowIndex': 1,
            'columnIndex': 1
        },
        'insertBelow': 'true'
    }
  }
]

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

Spalten einfügen und löschen

Um eine Spalte in eine vorhandene Tabelle einzufügen, verwenden Sie die Methode InsertTableColumnRequest. Sie müssen Folgendes angeben:

  • Eine Zelle, neben die Sie eine neue Spalte einfügen möchten.
  • Auf welcher Seite (links oder rechts) die neue Spalte eingefügt werden soll

Das folgende Beispiel zeigt, wie Sie eine Spalte in den 2x2- wie oben gezeigt:

Java

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setInsertTableColumn(
            new InsertTableColumnRequest()
                .setTableCellLocation(
                    new TableCellLocation()
                        .setTableStartLocation(
                            new Location().setIndex(2).setTabId(TAB_ID))
                        .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,
          'tabId': TAB_ID
        },
        'rowIndex': 0,
        'columnIndex': 0
      },
      'insertRight': True
    },
}
]

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

Verwenden Sie zum Löschen einer Spalte die Methode DeleteTableColumnRequest. Sie geben die Zellenposition in einer Zielspalte wie zuvor gezeigt an. zum Einfügen einer Spalte.

Inhalt aus Tabellenzellen lesen

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

Inhalte in Tabellenzellen einfügen

Verwenden Sie eine InsertTextRequest, um in eine Tabellenzelle zu schreiben auf einen Index in der Zelle, die Sie aktualisieren möchten. Die Tabellenindexe passen sich der den aktualisierten Text berücksichtigt. Dasselbe gilt für das Löschen von Zellentext mit der DeleteContentRangeRequest.

Spaltenattribute ändern

Die 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 enthält. Um nur ausgewählte Spalten zu ändern, fügen Sie eine Liste mit Spaltennummern in den anfragen: Wenn Sie alle Spalten in der Tabelle ändern möchten, geben Sie eine leere Liste ein.

Im folgenden Beispiel wird die Spaltenbreite einer Tabelle aktualisiert, indem alle Spalten festgelegt werden auf 100 pt und dann die Breite der ersten Spalte auf 200 pt:

Java

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setUpdateTableColumnProperties(
            new UpdateTableColumnPropertiesRequest()
                .setTableStartLocation(
                    new Location()
                        .setIndex(2)
                        .setTabId(TAB_ID))
                .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)
                        .setTabId(TAB_ID))
                .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, 'tabId': TAB_ID},
    'columnIndices': [],
    'tableColumnProperties': {
      'widthType': 'FIXED_WIDTH',
      'width': {
        'magnitude': 100,
        'unit': 'PT'
      }
    },
    'fields': '*'
  },
  'updateTableColumnProperties': {
    'tableStartLocation': {'index': 2, 'tabId': TAB_ID},
    '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

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 enthält. Um nur ausgewählte Zeilen zu ändern, fügen Sie eine Liste mit Zeilennummern in die anfragen: Um alle Zeilen in der Tabelle zu ändern, geben Sie eine leere Liste an.

Im folgenden Beispiel wird die Mindesthöhe für 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)
                        .setTabId(TAB_ID))
                .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, 'tabId': TAB_ID},
        'rowIndices': [3],
        'tableRowStyle': {
            'minRowHeight': {
              'magnitude': 18,
              'unit': 'PT'
            }
        },
        'fields': '*'
    },
}
]

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