La API de Google Docs te permite editar el contenido de las tablas. Las operaciones que puedes realizar incluyen las siguientes:
- Insertar y borrar filas, columnas o tablas completas
- Insertar contenido en las celdas de la tabla
- Leer contenido de celdas de tablas
- Modificar las propiedades de las columnas y el estilo de las filas
Las tablas en Documentos de Google se representan como un tipo de StructuralElement en el documento. Cada tabla contiene una lista de filas de la tabla, en la que cada fila contiene una lista de celdas de la tabla. Al igual que con todos los elementos estructurales, la tabla tiene índices de inicio y fin, que indican la posición de la tabla en el documento. Consulta la estructura para obtener más información sobre la indexación. Las propiedades de la tabla incluyen muchos elementos de estilo, como el ancho de las columnas y el padding.
En el siguiente fragmento de código JSON, se muestra una tabla simple de 2 x 2 con la mayoría de los detalles quitados:
"table": {
"columns": 2,
"rows": 2,
"tableRows": [
{ "tableCells": [
{
"content": [ { "paragraph": { ... }, } ],
},
{
"content": [ { "paragraph": { ... }, } ],
}
],
},
{
"tableCells": [
{
"content": [ { "paragraph": { ... }, } ],
},
{
"content": [ { "paragraph": { ... }, } ],
}
],
}
]
}
Cómo insertar y borrar tablas
Para agregar una tabla nueva a un documento, usa InsertTableRequest. Debes especificar lo siguiente cuando insertes una tabla:
- Son las dimensiones de la tabla en filas y columnas.
- Ubicación para insertar la tabla nueva: Puede ser un índice dentro de un segmento o el final de un segmento. Cualquiera de los dos debe incluir el ID de la pestaña especificada.
No hay un método explícito para borrar tablas. Para borrar una tabla de un documento, trátala como cualquier otro contenido: usa DeleteContentRangeRequest y especifica un rango que abarque toda la tabla.
En el siguiente ejemplo, se inserta una tabla de 3 x 3 al final de un documento vacío:
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()
En este ejemplo correspondiente, se muestra cómo borrar la tabla que se insertó 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 borras una tabla como contenido normal (especificando los índices de inicio y finalización), debes obtener estos índices de algún lugar. En el ejemplo, se muestra una forma de extraer estos índices del contenido del documento.
Cómo insertar y borrar filas
Si tu documento ya contiene una tabla, la API de Documentos de Google te permite insertar y borrar filas de la tabla. Usa InsertTableRowRequest para insertar filas arriba o debajo de una celda de tabla especificada, y DeleteTableRowRequest para quitar una fila que abarque la ubicación de celda especificada.
En el siguiente ejemplo, se inserta texto en la primera celda de una tabla y se agrega una fila a la tabla.
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()
Cómo insertar y borrar columnas
Para insertar una columna en una tabla existente, usa InsertTableColumnRequest. Debes especificar lo siguiente:
- Una celda junto a la que deseas insertar una columna nueva.
- Lado (izquierdo o derecho) en el que se insertará la columna nueva.
En el siguiente ejemplo, se muestra cómo puedes insertar una columna en la tabla de 2x2 que se mostró 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 borrar una columna, usa DeleteTableColumnRequest. Especificas la ubicación de la celda dentro de una columna objetivo tal como se mostró anteriormente para insertar una columna.
Lectura de contenido de celdas de tablas
Una celda de tabla contiene una lista de elementos estructurales. Cada uno de estos elementos estructurales puede ser un párrafo con texto o algún otro tipo de estructura, incluso otra tabla. Para leer el contenido de la tabla, puedes inspeccionar cada elemento de forma recursiva, como se muestra en Extraer texto.
Cómo insertar contenido en celdas de tablas
Para escribir en una celda de la tabla, usa un InsertTextRequest en un índice dentro de la celda que deseas actualizar. Los índices de la tabla se ajustan para tener en cuenta el texto actualizado. Lo mismo se aplica a la eliminación de texto de celdas con DeleteContentRangeRequest.
Cómo modificar las propiedades de las columnas
UpdateTableColumnPropertiesRequest te permite modificar las propiedades de una o más columnas de una tabla.
Debes proporcionar el índice inicial de la tabla, junto con un objeto TableColumnProperties. Para modificar solo las columnas seleccionadas, incluye una lista de números de columna en la solicitud. Para modificar todas las columnas de la tabla, proporciona una lista vacía.
En el siguiente ejemplo, se actualizan los anchos de las columnas de una tabla. Primero, se establecen todas las columnas en 100 pt de ancho y, luego, se establece el ancho de la primera columna en 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()
Cómo modificar los estilos de las filas
UpdateTableRowsStyleRequest te permite modificar el estilo de una o más filas de una tabla.
Debes proporcionar el índice inicial de la tabla, junto con un objeto TableRowStyle. Para modificar solo las filas seleccionadas, incluye una lista de números de fila en la solicitud. Para modificar todas las filas de la tabla, proporciona una lista vacía.
En el siguiente ejemplo, se establece la altura mínima de la fila 3 de una tabla:
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()