テーブルの操作

Google Docs API を使用して、テーブルの内容を編集できます。次のようなオペレーションを実行できます。

  • 行、列、または表全体の挿入と削除を行います。
  • 表のセルにコンテンツを挿入します。
  • テーブルのセルからコンテンツを読み取ります。
  • 列のプロパティと行のスタイルを変更します。

Google ドキュメント内の表は、ドキュメント内では StructuralElement の一種として表されます。各テーブルにはテーブル行のリストが含まれ、各行にはテーブルセルのリストが含まれます。すべての構造要素と同様に、テーブルにはドキュメント内のテーブルの位置を示す開始インデックスと終了インデックスがあります。インデックスの詳細については、構造をご覧ください。表のプロパティには、列の幅やパディングなど、さまざまなスタイル要素が含まれます。

次の JSON フラグメントは、詳細の大部分が削除されたシンプルな 2x2 テーブルを示しています。

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

テーブルの挿入と削除

新しいテーブルをドキュメントに追加するには、InsertTableRequest を使用します。テーブルを挿入するときは、以下を指定する必要があります。

  • 行と列の表のディメンション。
  • 新しいテーブルを挿入する場所: セグメント内のインデックスまたはセグメントの末尾を指定できます。

テーブルを削除する明示的な方法はありません。ドキュメントからテーブルを削除するには、他のコンテンツと同様に扱います。DeleteContentRangeRequest を使用して、テーブル全体を対象とする範囲を指定します。

次の例では、空のドキュメントの末尾に 3x3 テーブルを挿入しています。

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

次の例は、以前に挿入したテーブルを削除する方法を示しています。

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

開始インデックスと終了インデックスを指定してテーブルを通常のコンテンツとして削除するため、これらのインデックスをどこかから取得する必要があります。この例は、ドキュメント コンテンツからこれらのインデックスを抽出する 1 つの方法を示しています。

行の挿入と削除

ドキュメントにすでに表が含まれている場合は、Google Docs API を使用して表の行を挿入、削除できます。指定したテーブルセルの上または下に行を挿入するには InsertTableRowRequest を使用し、指定したセルの位置にまたがる行を削除するには、DeleteTableRowRequest を使用します。

次の例では、表の最初のテーブルセルにテキストを挿入し、表の行を追加します。

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

列の挿入と削除

既存のテーブルに列を挿入するには、InsertTableColumnRequest を使用します。次の項目を指定する必要があります。

  • 新しい列を挿入するセルの横にあるセル。
  • 新しい列を挿入する側(左右)

次の例は、前述の 2x2 テーブルに列を挿入する方法を示しています。

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

列を削除するには、DeleteTableColumnRequest を使用します。列を挿入する場合と同様に、ターゲット列内のセルの位置を指定します。

テーブルのセルからのコンテンツの読み取り

表のセルには、構造要素のリストが含まれます。これらの各構造要素は、テキストを含む段落、または別の種類の構造(別の表を含む)にすることができます。テーブル コンテンツを読み取るには、テキストの抽出で説明されているように、各要素を再帰的に検査します。

表のセルにコンテンツを挿入する

テーブルセルに書き込むには、更新するセル内のインデックスに InsertTextRequest を使用します。テーブルのインデックスは、更新されたテキストに合わせて調整されます。DeleteContentRangeRequest でセルテキストを削除する場合についても同様です。

列のプロパティの変更

UpdateTableColumnPropertiesRequest を使用すると、テーブル内の 1 つ以上の列のプロパティを変更できます。

テーブルの開始インデックスと TableColumnProperties オブジェクトを指定する必要があります。選択した列のみを変更するには、列に列番号のリストを含めます。テーブル内のすべての列を変更するには、空のリストを指定します。

次の例では、テーブルの列幅を更新し、すべての列の幅を 100 ポイントに設定し、最初の列の幅を 200 pt に設定しています。

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

行のスタイルを変更する

UpdateTableRowsStyleRequest を使用すると、テーブル内の 1 つ以上の行のスタイルを変更できます。

テーブルの開始インデックスと TableRowStyle オブジェクトを指定する必要があります。選択した行のみを変更するには、リクエストに行番号のリストを含めます。テーブル内のすべての行を変更するには、空のリストを指定します。

次の例では、テーブルの行 3 の最小の高さを設定しています。

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