Google 文件 API 可讓您編輯表格內容。您可以執行的作業包括:
- 插入及刪除資料列、資料欄或整個表格。
- 在表格儲存格中插入內容。
- 讀取表格儲存格中的內容。
- 修改資料欄屬性和資料列的樣式。
Google 文件中的表格會在文件中以 StructuralElement 的形式呈現。每個資料表都包含一組資料表列,每列都包含一組資料表儲存格。如同所有結構元素,資料表也有開始和結束索引,用來指出資料表在文件中的相對位置。如要進一步瞭解索引,請參閱結構。表格屬性包含許多樣式元素,例如欄寬和邊距。
下列 JSON 片段會顯示簡單的 2x2 表格,其中已移除大部分的詳細資料:
"table": {
"columns": 2,
"rows": 2,
"tableRows": [
{ "tableCells": [
{
"content": [ { "paragraph": { ... }, } ],
},
{
"content": [ { "paragraph": { ... }, } ],
}
],
},
{
"tableCells": [
{
"content": [ { "paragraph": { ... }, } ],
},
{
"content": [ { "paragraph": { ... }, } ],
}
],
}
]
}
插入及刪除資料表
如要在文件中新增表格,請使用 InsertTableRequest。插入表格時,您必須指定下列項目:
- 表格中的列和欄維度。
- 插入新資料表的位置:可以是區隔中的索引,也可以是區隔的結尾。兩者都應包含指定分頁的 ID。
目前沒有明確的方法可用來刪除資料表。如要從文件中刪除表格,請視為其他內容:使用 DeleteContentRangeRequest,指定涵蓋整個表格的範圍。
以下範例會在空白文件的結尾插入 3x3 表格:
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()
以下對應範例說明如何刪除先前插入的資料表:
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()
由於您會以一般內容的形式刪除資料表 (透過指定起始和結束索引),因此必須從某處取得這些索引。這個範例說明瞭從文件內容中擷取這些索引的一種方法。
插入及刪除資料列
如果文件已包含表格,Google 文件 API 可讓您插入及刪除表格資料列。使用 InsertTableRowRequest 可在指定表格儲存格的上方或下方插入資料列,而 DeleteTableRowRequest 可移除跨越指定儲存格位置的資料列。
以下範例會將文字插入資料表的第一個資料表儲存格,並新增資料表資料列。
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()
插入及刪除資料欄
如要將資料欄插入現有資料表,請使用 InsertTableColumnRequest。您必須指定下列項目:
- 要插入新欄的儲存格旁邊。
- 插入新欄的側邊 (左側或右側)。
以下範例說明如何在先前顯示的 2x2 資料表中插入資料欄:
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()
如要刪除資料欄,請使用 DeleteTableColumnRequest。您可以指定目標欄中的儲存格位置,就像先前插入資料欄時一樣。
讀取表格儲存格中的內容
表格儲存格包含結構元素清單;每個結構元素可以是含有文字的段落或其他類型的結構,甚至是另一個表格。如要讀取表格內容,您可以遞迴檢查每個元素,如「Extract Text」所示。
在表格儲存格中插入內容
如要寫入表格儲存格,請使用 InsertTextRequest 至要更新的儲存格內的索引。表格索引會根據更新的文字進行調整。同理,如果使用 DeleteContentRangeRequest 刪除儲存格文字,也會發生相同情況。
修改欄屬性
UpdateTableColumnPropertiesRequest 可讓您修改資料表中一或多個資料欄的屬性。
您必須提供資料表的起始索引,以及 TableColumnProperties 物件。如要只修改所選資料欄,請在要求中加入資料欄編號清單;如要修改表格中的所有資料欄,請提供空白清單。
以下範例會更新資料表的欄寬,將所有欄的寬度設為 100 點,然後將第一欄的寬度設為 200 點:
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()
修改資料列樣式
UpdateTableRowsStyleRequest 可讓您修改資料表中一或多個資料列的樣式。
您必須提供資料表的起始索引,以及 TableRowStyle 物件。如要只修改所選資料列,請在要求中加入資料列編號清單;如要修改表格中的所有資料列,請提供空白清單。
以下範例會設定表格第 3 列的最低高度:
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()