La API de Documentos de Google te permite editar el contenido de las tablas. Entre las operaciones que puedes realizar, se incluyen las siguientes:
- Inserta y borra filas, columnas o tablas completas.
- Inserta contenido en las celdas de la tabla.
- Lee el contenido de las celdas de la tabla.
- Modifica las propiedades de las columnas y el estilo de las filas.
Las tablas de Documentos de Google se representan como un tipo de StructuralElement en el documento. Cada tabla contiene una lista de filas de tabla en la que cada fila contiene una lista de celdas de tabla. Al igual que con todos los elementos estructurales, la tabla tiene índices de inicio y fin que indican su posición en el documento. Consulta la estructura para obtener más información sobre el indexado. Las propiedades de la tabla incluyen muchos elementos de estilo, como el ancho de las columnas y el padding.
En el siguiente fragmento JSON, se muestra una tabla simple de 2 × 2 con la mayor parte de los detalles eliminados:
"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. Cuando insertes una tabla, debes especificar lo siguiente:
- Las dimensiones de la tabla en filas y columnas.
- La ubicación en la que se insertará la tabla nueva: puede ser un índice dentro de un segmento o el final de un segmento. Cualquiera de ellos 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 lo harías con cualquier otro contenido: usa la DeleteContentRangeRequest y especifica un rango que cubra toda la tabla.
En el siguiente ejemplo, se inserta una tabla de 3 × 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 insertada 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 fin), 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 la celda especificada.
En el siguiente ejemplo, se inserta texto en la primera celda de una tabla y se agrega una fila.
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.
- El 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 2x2 que se mostró antes:
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 de la misma manera que se muestra anteriormente para insertar una columna.
Cómo leer 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 de forma recursiva cada elemento, como se muestra en Cómo extraer texto.
Cómo insertar contenido en celdas de tabla
Para escribir en una celda de tabla, usa una 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.
Modifica 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 columnas 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, se establecen todas las columnas con un ancho de 100 puntos y, luego, el ancho de la primera columna a 200 puntos:
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()