Mit der Google Docs API können Sie Tabelleninhalte bearbeiten. Folgende Vorgänge sind möglich:
- 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 End indizes, 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 Abstände.
Das folgende JSON-Fragment zeigt eine einfache 2x2-Tabelle, bei 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 es kann 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 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(<var>TAB_ID</var>)) .setRows(3) .setColumns(3))); BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests); BatchUpdateDocumentResponse response = docsService.documents().batchUpdate(<var>DOCUMENT_ID</var>, 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': <var>TAB_ID</var> } }, } ] result = service.documents().batchUpdate(documentId=<var>DOCUMENT_ID</var>, body={'requests': requests}).execute()
In diesem entsprechenden Beispiel wird gezeigt, 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(<var>DOCUMENT_ID</var>).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(<var>DOCUMENT_ID</var>, 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=<var>DOCUMENT_ID</var>, body={'requests': requests}).execute()
Da Sie eine Tabelle als normalen Inhalt löschen, indem Sie Start- und Endindizes angeben, müssen Sie diese Indizes irgendwo abrufen. Das Beispiel zeigt eine Möglichkeit, diese Indizes 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 die InsertTableRowRequest , um Zeilen über oder unter einer angegebenen Tabellenzelle einzufügen, und die DeleteTableRowRequest , um eine Zeile zu 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(<var>TAB_ID</var>)))); requests.add(new Request().setInsertTableRow(new InsertTableRowRequest() .setTableCellLocation(new TableCellLocation() .setTableStartLocation(new Location() .setIndex(2).setTabId(<var>TAB_ID</var>)) .setRowIndex(1) .setColumnIndex(1)) .setInsertBelow(true))); BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests); BatchUpdateDocumentResponse response = docsService.documents() .batchUpdate(<var>DOCUMENT_ID</var>, body).execute();
Python
requests = [{ 'insertText': { 'location': { 'index': 5, 'tabId': <var>TAB_ID</var> }, 'text': 'Hello' } }, { 'insertTableRow': { 'tableCellLocation': { 'tableStartLocation': { 'index': 2, 'tabId': <var>TAB_ID</var> }, 'rowIndex': 1, 'columnIndex': 1 }, 'insertBelow': 'true' } } ] result = service.documents().batchUpdate(documentId=<var>DOCUMENT_ID</var>, 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
- Die Seite (links oder rechts), auf der die neue Spalte eingefügt werden soll
Im folgenden Beispiel wird gezeigt, wie Sie eine Spalte in die zuvor 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).setTabId(<var>TAB_ID</var>)) .setRowIndex(0) .setColumnIndex(0)) .setInsertRight(true))); BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests); BatchUpdateDocumentResponse response = docsService.documents().batchUpdate(<var>DOCUMENT_ID</var>, body).execute();
Python
requests = [{ 'insertTableColumn': { 'tableCellLocation': { 'tableStartLocation': { 'segmentId': '', 'index': 2, 'tabId': <var>TAB_ID</var> }, 'rowIndex': 0, 'columnIndex': 0 }, 'insertRight': True }, } ] result = service.documents().batchUpdate(documentId=<var>DOCUMENT_ID</var>, body={'requests': requests}).execute()
Verwenden Sie DeleteTableColumnRequest, um eine Spalte zu löschen. Sie geben die Zellposition in einer Zielspalte genauso an wie zuvor beim Einfügen einer Spalte.
Inhalte aus Tabellenzellen lesen
Eine Tabellenzelle enthält eine Liste von strukturellen Elementen; jedes dieser Strukturelemente kann ein Absatz mit Text oder eine andere Art von Struktur sein, sogar eine weitere Tabelle. Wenn Sie Tabelleninhalte lesen möchten, 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 ein InsertTextRequest für einen Index in der Zelle, die Sie aktualisieren möchten. Die Tabellenindizes werden an den aktualisierten Text angepasst. Dasselbe gilt für das Löschen von Zelltext mit dem 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 sowie ein TableColumnProperties Objekt angeben. Wenn Sie nur ausgewählte Spalten ändern möchten, fügen Sie der Anfrage eine Liste mit Spaltennummern hinzu. 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 100 pt festgelegt, 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(<var>TAB_ID</var>)) .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(<var>TAB_ID</var>)) .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(<var>DOCUMENT_ID</var>, body).execute();
Python
requests = [{ 'updateTableColumnProperties': { 'tableStartLocation': {'index': 2, 'tabId': <var>TAB_ID</var>}, 'columnIndices': [], 'tableColumnProperties': { 'widthType': 'FIXED_WIDTH', 'width': { 'magnitude': 100, 'unit': 'PT' } }, 'fields': '*' }, 'updateTableColumnProperties': { 'tableStartLocation': {'index': 2, 'tabId': <var>TAB_ID</var>}, 'columnIndices': [0], 'tableColumnProperties': { 'widthType': 'FIXED_WIDTH', 'width': { 'magnitude': 200, 'unit': 'PT' } }, 'fields': '*' }, } ] result = service.documents().batchUpdate(documentId=<var>DOCUMENT_ID</var>, 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 der Anfrage eine Liste mit Zeilennummern hinzu. 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(<var>TAB_ID</var>)) .setRowIndices(rowIndices) .setTableRowStyle( new TableRowStyle() .setMinRowHeight( new Dimension().setMagnitude(18d).setUnit("PT"))) .setFields("*"))); BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests); BatchUpdateDocumentResponse response = docsService.documents().batchUpdate(<var>DOCUMENT_ID</var>, body).execute();
Python
requests = [{ 'updateTableRowStyle': { 'tableStartLocation': {'index': 2, 'tabId': <var>TAB_ID</var>}, 'rowIndices': [3], 'tableRowStyle': { 'minRowHeight': { 'magnitude': 18, 'unit': 'PT' } }, 'fields': '*' }, } ] result = service.documents().batchUpdate(documentId=<var>DOCUMENT_ID</var>, body={'requests': requests}).execute()