A API Google Docs permite que você edite o conteúdo de tabelas. As operações que podem ser incluem o seguinte:
- Insira e exclua linhas, colunas ou tabelas inteiras.
- Inserir conteúdo nas células da tabela.
- Ler conteúdo das células da tabela.
- Modifique as propriedades da coluna e o estilo das linhas.
As tabelas nos Documentos Google são representados como um tipo de StructuralElement. no documento. cada tabela contém uma lista de linhas da tabela em que cada linha contém uma lista de células da tabela. Assim como em todos os elementos estruturais, a tabela tem índices de início e fim; indicando a posição da tabela no documento. Veja a estrutura para mais informações sobre indexação. As propriedades da tabela incluem muitos elementos de estilo como larguras de coluna e padding.
O fragmento JSON a seguir mostra uma tabela simples 2x2 com a maior parte dos detalhes removido:
"table": {
"columns": 2,
"rows": 2,
"tableRows": [
{ "tableCells": [
{
"content": [ { "paragraph": { ... }, } ],
},
{
"content": [ { "paragraph": { ... }, } ],
}
],
},
{
"tableCells": [
{
"content": [ { "paragraph": { ... }, } ],
},
{
"content": [ { "paragraph": { ... }, } ],
}
],
}
]
}
Como inserir e excluir tabelas
Para adicionar uma nova tabela a um documento, use o InsertTableRequest. Você deve especificar o seguinte ao inserir uma tabela:
- As dimensões da tabela em linhas e colunas.
- O local para inserir a nova tabela: pode ser um índice dentro de um segmento ou pode ser o final de um segmento. Qualquer um deles precisa incluir o ID da guia especificada.
Não há um método explícito para excluir tabelas. Para excluir uma tabela de um documento, trate-o como faria com qualquer outro conteúdo: use o DeleteContentRangeRequest, especificar um intervalo que abrange a tabela inteira.
O exemplo a seguir insere uma tabela 3x3 no final de um documento vazio:
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()
Este exemplo correspondente mostra como excluir a tabela inserida anteriormente:
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()
Como você exclui uma tabela como conteúdo comum, especificando início e fim, você precisa conseguir esses índices de algum lugar. O exemplo mostra uma forma de extrair esses índices do conteúdo do documento.
Como inserir e excluir linhas
Se o documento já contém uma tabela, a API Google Docs permite inserir e excluir linhas da tabela. Use a instrução InsertTableRowRequest. para inserir linhas acima ou abaixo de uma a célula da tabela especificada e a solicitação DeleteTableRowRequest para remover uma linha que abrange o local da célula especificado.
O exemplo a seguir insere texto na primeira célula da tabela de uma tabela e adiciona uma linha de tabela.
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()
Como inserir e excluir colunas
Para inserir uma coluna em uma tabela já existente, use o método InsertTableColumnRequest. Você deve especificar o seguinte:
- Uma célula ao lado da qual você deseja inserir uma nova coluna.
- Qual lado (esquerda ou direita) inserir a nova coluna.
O exemplo a seguir mostra como você pode inserir uma coluna no bloco 2x2 da tabela mostrada anteriormente:
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()
Para excluir uma coluna, use o método DeleteTableColumnRequest. Você especifica a localização da célula em uma coluna de destino, conforme mostrado anteriormente para inserir uma coluna.
Como ler o conteúdo das células da tabela
Uma célula da tabela contém uma lista de elementos estruturais. cada um desses elementos estruturais pode ser um parágrafo com texto ou outro tipo de estrutura, até mesmo outra tabela. Para ler o conteúdo da tabela, você pode inspecionam recursivamente cada elemento, como mostrado Extrair texto.
Como inserir conteúdo nas células da tabela
Para gravar em uma célula da tabela, use uma InsertTextRequest. a um índice da célula que você deseja atualizar. Os índices da tabela se ajustam para o texto atualizado. O mesmo se aplica à exclusão do texto da célula com as DeleteContentRangeRequest.
Como modificar propriedades de colunas
A UpdateTableColumnPropertiesRequest permite que você modifique as propriedades de uma ou mais colunas em uma tabela.
Você deve fornecer o índice inicial da tabela, junto com um TableColumnProperties objeto. Para modificar somente as colunas selecionadas, inclua uma lista de números de coluna no solicitação para modificar todas as colunas da tabela, forneça uma lista vazia.
O exemplo a seguir atualiza a largura das colunas de uma tabela, definindo todas as colunas para 100 pt de largura, depois a largura da primeira coluna para 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()
Modificar estilos de linhas
A UpdateTableRowsStyleRequest permite modificar o estilo de uma ou mais linhas em uma tabela.
Você deve fornecer o índice inicial da tabela, junto com um TableRowStyle objeto. Para modificar somente as linhas selecionadas, inclua uma lista com números de linhas no solicitação para modificar todas as linhas da tabela, forneça uma lista vazia.
O exemplo a seguir define a altura mínima da linha 3 de uma tabela:
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()