Bekerja dengan tabel

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

  • Menyisipkan dan menghapus baris, kolom, atau seluruh tabel.
  • Menyisipkan konten ke dalam sel tabel.
  • Membaca konten dari sel tabel.
  • Ubah properti kolom dan gaya baris.

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

Fragmen JSON berikut menampilkan tabel 2x2 sederhana dengan sebagian besar detail 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 menentukan 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. Salah satu harus menyertakan ID tab yang ditentukan.

Tidak ada metode eksplisit untuk menghapus tabel. Untuk menghapus tabel dari dokumen, perlakuannya sama 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().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()

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

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

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

Menyisipkan dan menghapus baris

Jika dokumen Anda sudah berisi tabel, Google Dokumen 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 mencakup lokasi sel yang ditentukan.

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

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

Menyisipkan dan menghapus kolom

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

  • Sel di samping tempat Anda ingin menyisipkan kolom baru.
  • Sisi mana (kiri atau kanan) untuk menyisipkan kolom baru.

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

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

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 lain—bahkan tabel lain. Untuk membaca konten tabel, Anda dapat memeriksa setiap elemen secara berulang, seperti yang ditunjukkan dalam Mengekstrak Teks.

Menyisipkan konten ke dalam sel tabel

Untuk menulis ke sel tabel, gunakan InsertTextRequest ke indeks dalam sel yang ingin Anda perbarui. Indeks tabel disesuaikan untuk mempertimbangkan 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 ke 200 pt:

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

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