Praca z tabelami

Interfejs API Dokumentów Google umożliwia edytowanie zawartości tabeli. Czynności, które możesz wykonać:

  • Wstawianie i usuwanie wierszy, kolumn lub całych tabel.
  • Wstaw treść do komórek tabeli.
  • Odczyt zawartości komórek tabeli.
  • Modyfikuj właściwości kolumn i styl wierszy.

Tabele w Dokumentach Google są reprezentowane w dokumencie jako typ StructuralElement. Każda tabela zawiera listę wierszy tabeli, z których każdy zawiera listę komórek tabeli. Tak jak w przypadku wszystkich elementów strukturalnych, tabela ma indeksy początkowe i końcowe, które określają jej pozycję w dokumencie. Więcej informacji o indeksowaniu znajdziesz w strukturze. Właściwości tabeli obejmują wiele elementów stylu, np. szerokości kolumn i dopełnienie.

Ten fragment kodu JSON zawiera prostą tabelę 2 x 2 z usuniętymi większością szczegółów:

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

Wstawianie i usuwanie tabel

Aby dodać nową tabelę do dokumentu, użyj InsertTableRequest. Podczas wstawiania tabeli musisz określić:

  • wymiary tabeli w wierszach i kolumnach,
  • Lokalizacja, w której ma zostać wstawiona nowa tabela: może to być indeks w obrębie segmentu lub koniec segmentu.

Nie ma jawnej metody usuwania tabel. Aby usunąć tabelę z dokumentu, traktuj ją tak samo jak każdą inną treść: użyj właściwości DeleteContentRangeRequest, określając zakres, który obejmuje całą tabelę.

Ten przykład wstawia tabelę 3 x 3 na końcu pustego dokumentu:

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()

Ten przykład pokazuje, jak usunąć wcześniej wstawiona tabelę:

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()

Usuwasz tabelę jako zwykłą zawartość, określając indeksy początkowe i końcowe, więc trzeba je z niego pobrać. Ten przykład pokazuje jeden sposób wyodrębniania tych indeksów z treści dokumentu.

Wstawianie i usuwanie wierszy

Jeśli dokument zawiera już tabelę, interfejs API Dokumentów Google umożliwia wstawianie i usuwanie wierszy tabeli. Użyj InsertTableRowRequest, aby wstawić wiersze powyżej lub poniżej określonej komórki tabeli, a DeleteTableRowRequest, aby usunąć wiersz, który obejmuje określoną lokalizację komórki.

Poniższy przykład wstawia tekst do pierwszej komórki tabeli i dodaje jej wiersz.

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()

Wstawianie i usuwanie kolumn

Aby wstawić kolumnę do istniejącej tabeli, użyj InsertTableColumnRequest. Musisz podać te informacje:

  • Komórka, do której chcesz wstawić nową kolumnę.
  • Po której stronie (lewej czy prawej) wstawić nową kolumnę.

Ten przykład pokazuje, jak wstawić kolumnę do pokazanej wcześniej tabeli 2 x 2:

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()

Aby usunąć kolumnę, użyj metody DeleteTableColumnRequest. Lokalizację komórki w kolumnie docelowej określasz tak samo jak podczas wstawiania kolumny.

Odczytywanie zawartości komórek tabeli

Komórka tabeli zawiera listę elementów strukturalnych. Każdy z nich może być akapitem z tekstem lub innym typem struktury, nawet inną tabelą. Aby odczytać zawartość tabeli, możesz rekurencyjnie sprawdzać każdy element, jak pokazujemy w sekcji Wyodrębnianie tekstu.

Wstawianie treści do komórek tabeli

Aby zapisać dane w komórce tabeli, użyj funkcji InsertTextRequest, aby wskazać indeks w komórce, którą chcesz zaktualizować. Indeksy tabel dostosują się do zaktualizowanego tekstu. To samo dotyczy usuwania tekstu komórki za pomocą metody DeleteContentRangeRequest.

Modyfikowanie właściwości kolumny

UpdateTableColumnPropertiesRequest pozwala zmienić właściwości jednej lub kilku kolumn tabeli.

Musisz podać początkowy indeks tabeli wraz z obiektem TableColumnProperties. Aby zmodyfikować tylko wybrane kolumny, uwzględnij w żądaniu listę numerów kolumn. Aby zmodyfikować wszystkie kolumny w tabeli, podaj pustą listę.

Ten przykład zmienia szerokość kolumn tabeli, ustawiając wszystkie kolumny na 100 punktów, a następnie szerokość pierwszej kolumny na 200 punktów:

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()

Modyfikowanie stylów wierszy

UpdateTableRowsStyleRequest umożliwia zmianę stylu jednego lub kilku wierszy tabeli.

Musisz podać indeks początkowy tabeli wraz z obiektem TableRowStyle. Aby zmodyfikować tylko wybrane wiersze, podaj w żądaniu listę numerów wierszy. Aby zmodyfikować wszystkie wiersze w tabeli, podaj pustą listę.

W tym przykładzie ustawiana jest minimalna wysokość wiersza 3 tabeli:

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()