การทำงานกับตาราง

Google เอกสาร 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().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()

ตัวอย่างที่เกี่ยวข้องนี้แสดงวิธีลบตารางที่แทรกไว้ก่อนหน้านี้

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

เนื่องจากคุณลบตารางที่เป็นเนื้อหาทั่วไปด้วยการระบุจุดเริ่มต้นและสิ้นสุด ดัชนี - คุณต้องรับดัชนีเหล่านี้มาจากที่ใดที่หนึ่ง ตัวอย่างนี้แสดง วิธีหนึ่งในการแยกดัชนีเหล่านี้จากเนื้อหาของเอกสาร

การแทรกและลบแถว

ถ้าเอกสารของคุณมีตารางอยู่แล้ว API ของ Google เอกสารจะช่วยให้คุณสามารถแทรก และลบแถวในตาราง ใช้ InsertTableRowRequest เพื่อแทรกแถวด้านบนหรือด้านล่าง เซลล์ตารางที่ระบุและ DeleteTableRowRequest เพื่อลบแถวที่กินพื้นที่ตำแหน่งเซลล์ที่ระบุ

ตัวอย่างต่อไปนี้แทรกข้อความในเซลล์แรกของตารางและเพิ่ม แถวในตาราง

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

การแทรกและลบคอลัมน์

หากต้องการแทรกคอลัมน์ลงในตารางที่มีอยู่ ให้ใช้เมธอด InsertTableColumnRequest. คุณต้องระบุสิ่งต่อไปนี้

  • เซลล์ถัดจากที่คุณต้องการแทรกคอลัมน์ใหม่
  • ด้านใด (ซ้ายหรือขวา) ที่จะแทรกคอลัมน์ใหม่

ตัวอย่างต่อไปนี้แสดงวิธีแทรกคอลัมน์ลงในแท็ก 2x2 ตารางที่แสดงก่อนหน้านี้:

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

หากต้องการลบคอลัมน์ ให้ใช้เมธอด DeleteTableColumnRequest. คุณระบุตำแหน่งของเซลล์ภายในคอลัมน์เป้าหมายตามที่แสดงก่อนหน้านี้ สำหรับการแทรกคอลัมน์

กำลังอ่านเนื้อหาจากเซลล์ของตาราง

เซลล์ของตารางมีรายการองค์ประกอบโครงสร้าง องค์ประกอบโครงสร้างแต่ละรายการเหล่านี้อาจเป็นย่อหน้าที่มีข้อความหรือประเภทอื่นก็ได้ ของโครงสร้างได้เป็นอย่างดี หรือแม้กระทั่งอีกหนึ่งตาราง หากต้องการอ่านสารบัญ คุณสามารถ ตรวจสอบองค์ประกอบแต่ละรายการซ้ำ ตามที่แสดงใน ดึงข้อความ

การแทรกเนื้อหาลงในเซลล์ของตาราง

หากต้องการเขียนในเซลล์ของตาราง ให้ใช้ InsertTextRequest ไปยังดัชนีภายในเซลล์ที่คุณต้องการอัปเดต ดัชนีตารางจะปรับเป็น สำหรับข้อความที่อัปเดต เช่นเดียวกับการลบข้อความเซลล์ที่มีแอตทริบิวต์ DeleteContentRangeRequest.

การแก้ไขพร็อพเพอร์ตี้ของคอลัมน์

UpdateTableColumnPropertiesRequest ช่วยให้คุณแก้ไขคุณสมบัติของคอลัมน์ในตารางได้ตั้งแต่ 1 คอลัมน์ขึ้นไป

คุณต้องระบุดัชนีเริ่มต้นของตาราง พร้อมทั้ง TableColumnProperties ออบเจ็กต์ หากต้องการแก้ไขเฉพาะคอลัมน์ที่เลือก ให้ใส่รายการหมายเลขคอลัมน์ไว้ในแท็ก คำขอ; หากต้องการแก้ไขคอลัมน์ทั้งหมดในตาราง ให้ระบุรายการที่ว่างเปล่า

ตัวอย่างต่อไปนี้อัปเดตความกว้างของคอลัมน์ของตาราง โดยตั้งค่าคอลัมน์ทั้งหมด เป็นความกว้าง 100 พอยต์ จากนั้นความกว้างของคอลัมน์แรกถึง 200 พอยต์

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

การแก้ไขรูปแบบแถว

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