Bekerja dengan tabel

Google Docs API memungkinkan Anda mengedit isi tabel. Operasi yang dapat Anda lakukan mencakup hal berikut:

  • Sisipkan dan hapus baris, kolom, atau seluruh tabel.
  • Masukkan konten ke dalam sel tabel.
  • Membaca konten dari sel tabel.
  • Ubah properti kolom dan gaya baris.

Tabel di Google Dokumen diwakili sebagai jenis StructuralElement dalam dokumen. Setiap tabel berisi daftar baris tabel dengan setiap baris berisi daftar sel tabel. Seperti semua elemen struktural, tabel ini memiliki indeks awal dan akhir, yang menunjukkan posisi tabel dalam dokumen. Lihat struktur untuk informasi selengkapnya tentang pengindeksan. Properti tabel mencakup banyak elemen gaya seperti lebar dan padding kolom.

Fragmen JSON berikut menampilkan tabel 2x2 sederhana dengan sebagian besar detailnya dihapus:

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

Menyisipkan dan menghapus tabel

Untuk menambahkan tabel baru ke dokumen, gunakan InsertTableRequest. Anda harus menetapkan hal berikut saat menyisipkan tabel:

  • Dimensi tabel dalam baris dan kolom.
  • Lokasi untuk menyisipkan tabel baru: ini dapat berupa indeks dalam segmen, atau dapat berupa akhir segmen.

Tidak ada metode eksplisit untuk menghapus tabel. Untuk menghapus tabel dari dokumen, perlakukan tabel seperti konten lainnya: gunakan DeleteContentRangeRequest, yang menentukan rentang yang mencakup seluruh tabel.

Contoh berikut menyisipkan tabel 3x3 di akhir dokumen kosong:

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

Contoh yang sesuai ini menunjukkan cara menghapus tabel yang sebelumnya disisipkan:

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

Karena menghapus tabel sebagai konten biasa—dengan menentukan indeks awal dan akhir—Anda perlu mendapatkan indeks ini dari suatu tempat. Contoh berikut menunjukkan salah satu cara untuk mengekstrak indeks ini dari konten dokumen.

Menyisipkan dan menghapus baris

Jika dokumen Anda sudah berisi tabel, Google Docs API memungkinkan Anda menyisipkan dan menghapus baris tabel. Gunakan InsertTableRowRequest untuk menyisipkan baris di atas atau di bawah sel tabel yang ditentukan dan DeleteTableRowRequest untuk menghapus baris yang menjangkau lokasi sel yang ditentukan.

Contoh berikut menyisipkan teks ke dalam sel tabel pertama tabel dan menambahkan baris tabel.

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

Menyisipkan dan menghapus kolom

Untuk menyisipkan kolom ke dalam tabel yang ada, gunakan InsertTableColumnRequest. Anda harus menentukan hal berikut:

  • Sel di sebelah Anda ingin kolom baru disisipkan.
  • Sisi mana (kiri atau kanan) yang akan disisipkan kolom baru.

Contoh berikut menunjukkan cara menyisipkan kolom ke dalam tabel 2x2 yang ditunjukkan sebelumnya:

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

Untuk menghapus kolom, gunakan DeleteTableColumnRequest. Anda menentukan lokasi sel dalam kolom target seperti yang ditunjukkan sebelumnya untuk menyisipkan kolom.

Membaca konten dari sel tabel

Sel tabel berisi daftar elemen struktural; setiap elemen struktural ini dapat berupa paragraf dengan teks atau jenis struktur lainnya—bahkan tabel lain. Untuk membaca isi tabel, Anda dapat memeriksa setiap elemen secara rekursif, seperti yang ditunjukkan pada Extract Text.

Menyisipkan konten ke sel tabel

Untuk menulis ke sel tabel, gunakan InsertTextRequest ke indeks dalam sel yang ingin Anda perbarui. Indeks tabel disesuaikan untuk memperhitungkan teks yang diperbarui. Hal yang sama berlaku untuk menghapus teks sel dengan DeleteContentRangeRequest.

Mengubah properti kolom

UpdateTableColumnPropertiesRequest memungkinkan Anda mengubah properti satu atau beberapa kolom dalam tabel.

Anda harus memberikan indeks awal tabel, beserta objek TableColumnProperties. Untuk mengubah kolom yang dipilih saja, sertakan daftar nomor kolom dalam permintaan; untuk mengubah semua kolom dalam tabel, berikan daftar kosong.

Contoh berikut memperbarui lebar kolom tabel, menetapkan semua kolom ke lebar 100 pt, lalu lebar kolom pertama menjadi 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()

Mengubah gaya baris

UpdateTableRowsStyleRequest memungkinkan Anda mengubah gaya satu atau beberapa baris dalam tabel.

Anda harus memberikan indeks awal tabel, beserta objek TableRowStyle. Untuk mengubah baris yang dipilih saja, sertakan daftar nomor baris dalam permintaan; untuk mengubah semua baris dalam tabel, berikan daftar kosong.

Contoh berikut menetapkan tinggi minimum baris 3 tabel:

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