Utilizzo delle tabelle

L'API Documenti Google consente di modificare i contenuti delle tabelle. Le operazioni che puoi eseguire includono:

  • Inserisci ed elimina righe, colonne o intere tabelle.
  • Inserisci i contenuti nelle celle della tabella.
  • Lettura dei contenuti delle celle della tabella.
  • Modifica le proprietà delle colonne e lo stile delle righe.

Le tabelle in Documenti Google sono rappresentate come un tipo di StructuralElement nel documento. Ogni tabella contiene un elenco di righe della tabella in cui ogni riga contiene un elenco di celle della tabella. Come per tutti gli elementi strutturali, la tabella ha indici di inizio e fine, che ne indicano la posizione nel documento. Consulta la struttura per ulteriori informazioni sull'indicizzazione. Le proprietà della tabella includono molti elementi di stile, come la larghezza delle colonne e la spaziatura interna.

Il seguente frammento JSON mostra una semplice tabella 2 x 2 con la maggior parte dei dettagli rimossi:

"table": {
    "columns": 2,
    "rows": 2,
    "tableRows": [
        { "tableCells": [
                {
                    "content": [ { "paragraph": { ...  }, } ],
                },
                {
                    "content": [ { "paragraph": { ... }, } ],
                }
            ],
        },
        {
            "tableCells": [
                {
                    "content": [ { "paragraph": { ... }, } ],
                },
                {
                    "content": [ { "paragraph": { ... }, } ],
                }
            ],
        }
    ]
}

Inserimento ed eliminazione di tabelle

Per aggiungere una nuova tabella a un documento, utilizza InsertTableRequest. Quando inserisci una tabella, devi specificare quanto segue:

  • Le dimensioni della tabella in righe e colonne.
  • La posizione in cui inserire la nuova tabella: può essere un indice all'interno di un segmento o può essere la fine di un segmento.

Non esiste un metodo esplicito per eliminare le tabelle. Per eliminare una tabella da un documento, gestiscila come qualsiasi altro contenuto: utilizza DeleteContentRangeRequest, specificando un intervallo che copre l'intera tabella.

L'esempio seguente inserisce una tabella 3 x 3 alla fine di un documento vuoto:

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())
                .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': ''
          }
      },
  }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

L'esempio corrispondente mostra come eliminare la tabella inserita in precedenza:

Java

// Delete a table that was inserted at the start of the body.
// (The table is the second element in the body:
//  document.getBody().getContent().get(2).)

Document document = docsService.documents().get(DOCUMENT_ID).execute();
StructuralElement table = document.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()))));

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.
  # (The table is the second element in the body: ['body']['content'][2].)

  document = service.documents().get(documentId=DOCUMENT_ID).execute()
  table = document['body']['content'][2]

  requests = [{
      'deleteContentRange': {
        'range': {
          'segmentId': '',
          'startIndex': table['startIndex'],
          'endIndex':   table['endIndex']
        }
      },
  }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

Poiché elimini una tabella come contenuti ordinari, specificando gli indici di inizio e fine, devi recuperare questi indici da qualche parte. L'esempio mostra un modo per estrarre questi indici dai contenuti del documento.

Inserimento ed eliminazione di righe

Se il documento contiene già una tabella, l'API Documenti Google consente di inserire ed eliminare le righe della tabella. Utilizza InsertTableRowRequest per inserire righe sopra o sotto una cella di tabella specificata e DeleteTableRowRequest per rimuovere una riga che copre la posizione della cella specificata.

L'esempio seguente inserisce un testo nella prima cella di una tabella e aggiunge una riga della tabella.

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText("Hello")
        .setLocation(new Location().setIndex(5))));
requests.add(new Request().setInsertTableRow(new InsertTableRowRequest()
        .setTableCellLocation(new TableCellLocation()
                .setTableStartLocation(new Location()
                        .setIndex(2))
                .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
          },
          'text': 'Hello'
      }
    },
    {
      'insertTableRow': {
          'tableCellLocation': {
              'tableStartLocation': {
                      'index': 2
              },
              'rowIndex': 1,
              'columnIndex': 1
          },
          'insertBelow': 'true'
      }
    }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

Inserimento ed eliminazione di colonne

Per inserire una colonna in una tabella esistente, utilizza InsertTableColumnRequest. Devi specificare quanto segue:

  • Una cella accanto alla quale vuoi inserire una nuova colonna.
  • Da quale lato (sinistra o destra) inserire la nuova colonna.

L'esempio seguente mostra come inserire una colonna nella tabella 2 x 2 mostrata in precedenza:

Java

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setInsertTableColumn(
            new InsertTableColumnRequest()
                .setTableCellLocation(
                    new TableCellLocation()
                        .setTableStartLocation(
                            new Location().setIndex(2))
                        .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
          },
          'rowIndex': 0,
          'columnIndex': 0
        },
        'insertRight': True
      },
  }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

Per eliminare una colonna, utilizza DeleteTableColumnRequest. Devi specificare la posizione della cella all'interno di una colonna di destinazione proprio come mostrato in precedenza per l'inserimento di una colonna.

Lettura dei contenuti delle celle della tabella

Una cella di tabella contiene un elenco di elementi strutturali; ognuno di questi elementi strutturali può essere un paragrafo con testo o un altro tipo di struttura, anche un'altra tabella. Per leggere i contenuti del sommario, puoi controllare in modo ricorsivo ogni elemento, come mostrato in Estrai testo.

Inserimento di contenuti nelle celle di una tabella

Per scrivere in una cella di tabella, utilizza InsertTextRequest in un indice all'interno della cella che vuoi aggiornare. Gli indici delle tabelle vengono modificati per tenere conto del testo aggiornato. Lo stesso vale per l'eliminazione del testo della cella con DeleteContentRangeRequest.

Modifica delle proprietà delle colonne

Il comando UpdateTableColumnPropertiesRequest consente di modificare le proprietà di una o più colonne di una tabella.

Devi fornire l'indice iniziale della tabella, insieme a un oggetto TableColumnProperties. Per modificare solo le colonne selezionate, includi un elenco di numeri di colonna nella richiesta; per modificare tutte le colonne della tabella, fornisci un elenco vuoto.

L'esempio seguente aggiorna la larghezza delle colonne di una tabella, impostando tutte le colonne su 100 pt, quindi su 200 pt la larghezza della prima colonna:

Java

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setUpdateTableColumnProperties(
            new UpdateTableColumnPropertiesRequest()
                .setTableStartLocation(new Location().setIndex(2))
                .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))
                .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},
      'columnIndices': [],
      'tableColumnProperties': {
        'widthType': 'FIXED_WIDTH',
        'width': {
          'magnitude': 100,
          'unit': 'PT'
        }
      },
      'fields': '*'
    },
    'updateTableColumnProperties': {
      'tableStartLocation': {'index': 2},
      'columnIndices': [0],
      'tableColumnProperties': {
        'widthType': 'FIXED_WIDTH',
        'width': {
          'magnitude': 200,
          'unit': 'PT'
        }
      },
      'fields': '*'
    },
  }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

Modificare gli stili delle righe

UpdateTableRowsStyleRequest consente di modificare lo stile di una o più righe di una tabella.

Devi fornire l'indice iniziale della tabella, insieme a un oggetto TableRowStyle. Per modificare solo le righe selezionate, includi un elenco di numeri di riga nella richiesta; per modificare tutte le righe della tabella, fornisci un elenco vuoto.

L'esempio seguente imposta l'altezza minima della riga 3 di una tabella:

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))
                .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},
          'rowIndices': [3],
          'tableRowStyle': {
              'minRowHeight': {
                'magnitude': 18,
                'unit': 'PT'
              }
          },
          'fields': '*'
      },
  }
  ]

  result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()