Mit der Google Docs API können Sie Tabelleninhalte bearbeiten. Sie können unter anderem folgende Vorgänge ausführen:
- Zeilen, Spalten oder ganze Tabellen einfügen und löschen
- Inhalte in Tabellenzellen einfügen
- Inhalte aus Tabellenzellen lesen
- Spalteneigenschaften und den Stil von Zeilen ändern.
Tabellen in Google Docs werden im Dokument als eine Art StructuralElement dargestellt. Jede Tabelle enthält eine Liste von Tabellenzeilen, wobei jede Zeile eine Liste von Tabellenzellen enthält. Wie bei allen strukturellen Elementen hat die Tabelle Start- und Endindex, die die Position der Tabelle im Dokument angeben. Weitere Informationen zur Indexierung finden Sie unter Struktur. Zu den Tabelleneigenschaften gehören viele Stilelemente wie Spaltenbreiten und Innenabstand.
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
Verwenden Sie InsertTableRequest, um einem Dokument eine neue Tabelle hinzuzufügen. Beim Einfügen einer Tabelle müssen Sie Folgendes angeben:
- Die Tabellendimensionen in Zeilen und Spalten.
- Die Position, an der die neue Tabelle eingefügt werden soll: Dies kann ein Index innerhalb eines Segments oder das Ende eines Segments sein. Beide sollten die ID des angegebenen Tabs enthalten.
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 DeleteContentRangeRequest und geben Sie einen Bereich an, der die gesamte Tabelle umfasst.
Im folgenden Beispiel wird eine 3×3-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().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 die zuvor eingefügte Tabelle gelöscht wird:
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()
Da Sie eine Tabelle als normalen Inhalt löschen, indem Sie Start- und Endindex angeben, müssen Sie diese Indexe irgendwoher abrufen. 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. Mit InsertTableRowRequest können Sie Zeilen oberhalb oder unterhalb einer angegebenen Tabellenzelle einfügen. Mit DeleteTableRowRequest können Sie eine Zeile entfernen, die sich über die angegebene Zellposition 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).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
Verwenden Sie InsertTableColumnRequest, um eine Spalte in eine vorhandene Tabelle einzufügen. Sie müssen Folgendes angeben:
- Eine Zelle, neben der eine neue Spalte eingefügt werden soll.
- Auf welcher Seite (links oder rechts) die neue Spalte eingefügt werden soll.
Das folgende Beispiel zeigt, wie Sie eine Spalte in die 2x2-Tabelle einfügen können, die oben dargestellt ist:
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 DeleteTableColumnRequest, um eine Spalte zu löschen. Sie geben die Zellposition in einer Zielspalte genau wie zuvor beim Einfügen einer Spalte an.
Inhalte 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 sein, sogar eine weitere Tabelle. Um Tabelleninhalte zu lesen, können Sie jedes Element rekursiv untersuchen, wie unter Text extrahieren beschrieben.
Inhalte in Tabellenzellen einfügen
Wenn Sie in eine Tabellenzelle schreiben möchten, verwenden Sie eine InsertTextRequest für 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 Zelltext mit DeleteContentRangeRequest.
Spalteneigenschaften ändern
Mit UpdateTableColumnPropertiesRequest können Sie die Attribute 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, fügen Sie eine Liste mit Spaltennummern in die Anfrage ein. Wenn Sie alle Spalten in der Tabelle ändern möchten, geben Sie eine leere Liste an.
Im folgenden Beispiel werden die Spaltenbreiten einer Tabelle aktualisiert. Zuerst werden alle Spalten auf eine Breite von 100 Punkt festgelegt, dann die Breite der ersten Spalte auf 200 Punkt:
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
Mit UpdateTableRowsStyleRequest können Sie den Stil einer oder mehrerer Zeilen in einer Tabelle ändern.
Sie müssen den Startindex der Tabelle sowie ein TableRowStyle-Objekt angeben. Wenn Sie nur ausgewählte Zeilen ändern möchten, fügen Sie eine Liste mit Zeilennummern in die Anfrage ein. 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) .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()