टेबल के साथ काम करना

इस दस्तावेज़ में, Google Docs API में टेबल इस्तेमाल करने का तरीका बताया गया है.

Docs API की मदद से, टेबल के कॉन्टेंट में बदलाव किया जा सकता है. इन कार्रवाइयों को पूरा किया जा सकता है:

  • पंक्तियां, कॉलम या पूरी टेबल जोड़ना और मिटाना.
  • टेबल सेल में कॉन्टेंट डालें.
  • टेबल सेल से कॉन्टेंट पढ़ता है.
  • कॉलम की प्रॉपर्टी और लाइनों की स्टाइल में बदलाव करें.

Google Docs में टेबल को दस्तावेज़ में StructuralElement के तौर पर दिखाया जाता है. हर Table में TableRow ऑब्जेक्ट की एक सूची होती है. हर लाइन में TableCell ऑब्जेक्ट की एक सूची होती है. सभी स्ट्रक्चरल एलिमेंट की तरह, टेबल में भी स्टार्ट और एंड इंडेक्स होते हैं. इनसे पता चलता है कि दस्तावेज़ में टेबल कहां है. टेबल की प्रॉपर्टी में कई स्टाइल एलिमेंट शामिल होते हैं. जैसे, कॉलम की चौड़ाई और पैडिंग.

उदाहरण के लिए टेबल

यहां दिए गए JSON फ़्रैगमेंट में, 2x2 टेबल दिखाई गई है. इसमें ज़्यादातर जानकारी हटा दी गई है:

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

नीचे दी गई टेबल में, 2x2 टेबल के हर स्ट्रक्चरल एलिमेंट के लिए इंडेक्स ऑफ़सेट दिखाए गए हैं. इसमें यह माना गया है कि टेबल इंडेक्स S से शुरू होती है और सभी सेल खाली हैं. हर सेल में सिर्फ़ एक नया लाइन कैरेक्टर \n है, जिसकी लंबाई = 1 है:

एलिमेंट पथ इंडेक्स से शुरू करें आखिरी इंडेक्स
टेबल / S S + 12
    TableRow 0 /rows[0] S + 1 S + 6
        TableCell (0,0) /rows[0]/cells[0] S + 2 S + 4
            Paragraph /rows[0]/cells[0]/p[0] S + 3 S + 4
        TableCell (0,1) /rows[0]/cells[1] S + 4 S + 6
            Paragraph /rows[0]/cells[1]/p[0] S + 5 S + 6
    TableRow 1 /rows[1] S + 6 S + 11
        TableCell (1,0) /rows[1]/cells[0] S + 7 S + 9
            Paragraph /rows[1]/cells[0]/p[0] S + 8 S + 9
        TableCell (1,1) /rows[1]/cells[1] S + 9 S + 11
            Paragraph /rows[1]/cells[1]/p[0] S + 10 S + 11

टेबल जोड़ना और मिटाना

किसी दस्तावेज़ में टेबल जोड़ने के लिए, InsertTableRequest का इस्तेमाल करें. टेबल डालते समय, आपको यह जानकारी देनी होगी:

  • टेबल डाइमेंशन, पंक्तियों और कॉलम में होते हैं.
  • टेबल डालने की जगह: यह किसी सेगमेंट (जैसे कि बॉडी, हेडर या फ़ुटर) में इंडेक्स हो सकता है या यह किसी सेगमेंट के आखिर में हो सकता है. इनमें से किसी एक में, तय किए गए टैब का आईडी शामिल होना चाहिए.

बॉडी के आखिर में कोई टेबल डालने के लिए, EndOfSegmentLocation ऑब्जेक्ट तय करें और segmentId को खाली छोड़ दें.

टेबल मिटाने का कोई तरीका नहीं है. किसी दस्तावेज़ से टेबल मिटाने के लिए, उसे किसी अन्य कॉन्टेंट की तरह ही मिटाएं: DeleteContentRangeRequest का इस्तेमाल करें और range को पूरी टेबल पर लागू करें.

यहां दिए गए कोड सैंपल में, किसी खाली दस्तावेज़ के आखिर में 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(<var>TAB_ID</var>))
                .setRows(3)
                .setColumns(3)));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(<var>DOCUMENT_ID</var>, 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': <var>TAB_ID</var>
        }
    },
}
]

result = service.documents().batchUpdate(documentId=<var>DOCUMENT_ID</var>, 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(<var>DOCUMENT_ID</var>).setIncludeTabsContent(true).execute();
String tabId = document.getTabs().get(0).getTabProperties().getTabId();
DocumentTab documentTab = document.getTabs().get(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(<var>DOCUMENT_ID</var>, 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=<var>DOCUMENT_ID</var>, body={'requests': requests}).execute()

लाइनें जोड़ना और मिटाना

अगर आपके दस्तावेज़ में पहले से ही कोई टेबल मौजूद है, तो Docs API की मदद से टेबल की पंक्तियां डाली और मिटाई जा सकती हैं. किसी टेबल सेल से पहले या बाद में लाइनें डालने के लिए, InsertTableRowRequest का इस्तेमाल करें. साथ ही, किसी लाइन को हटाने के लिए, DeleteTableRowRequest का इस्तेमाल करें.

यहां दिए गए कोड सैंपल में, किसी मौजूदा टेबल की पहली सेल में टेक्स्ट डालने और टेबल की लाइन जोड़ने का तरीका बताया गया है:

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText("Hello")
        .setLocation(new Location().setIndex(5).setTabId(<var>TAB_ID</var>))));
requests.add(new Request().setInsertTableRow(new InsertTableRowRequest()
        .setTableCellLocation(new TableCellLocation()
                .setTableStartLocation(new Location()
                        .setIndex(2).setTabId(<var>TAB_ID</var>))
                .setRowIndex(1)
                .setColumnIndex(1))
        .setInsertBelow(true)));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response = docsService.documents()
        .batchUpdate(<var>DOCUMENT_ID</var>, body).execute();

Python

requests = [{
      'insertText': {
        'location': {
          'index': 5,
          'tabId': <var>TAB_ID</var>
        },
        'text': 'Hello'
    }
  },
  {
    'insertTableRow': {
        'tableCellLocation': {
            'tableStartLocation': {
                'index': 2,
                'tabId': <var>TAB_ID</var>
            },
            'rowIndex': 1,
            'columnIndex': 1
        },
        'insertBelow': 'true'
    }
  }
]

result = service.documents().batchUpdate(documentId=<var>DOCUMENT_ID</var>, 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(<var>TAB_ID</var>))
                        .setRowIndex(0)
                        .setColumnIndex(0))
                .setInsertRight(true)));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(<var>DOCUMENT_ID</var>, body).execute();

Python

requests = [{
    'insertTableColumn': {
      'tableCellLocation': {
        'tableStartLocation': {
          'segmentId': '',
          'index': 2,
          'tabId': <var>TAB_ID</var>
        },
        'rowIndex': 0,
        'columnIndex': 0
      },
      'insertRight': True
    },
}
]

result = service.documents().batchUpdate(documentId=<var>DOCUMENT_ID</var>, body={'requests': requests}).execute()

किसी कॉलम को मिटाने के लिए, DeleteTableColumnRequest का इस्तेमाल करें. कॉलम डालने के लिए, आपको टारगेट कॉलम में सेल की जगह की जानकारी देनी होगी. यह जानकारी, पहले दिखाई गई जानकारी के मुताबिक होनी चाहिए.

टेबल सेल से कॉन्टेंट पढ़ना

टेबल सेल में StructuralElement ऑब्जेक्ट की सूची होती है. इनमें से हर स्ट्रक्चरल एलिमेंट, टेक्स्ट वाला पैराग्राफ़ या किसी दूसरे तरह का स्ट्रक्चर हो सकता है. यहां तक कि कोई दूसरी टेबल भी हो सकती है. टेबल का कॉन्टेंट पढ़ने के लिए, हर एलिमेंट की बार-बार जांच की जा सकती है. जैसा कि Docs API की मदद से किसी दस्तावेज़ से टेक्स्ट एक्सट्रैक्ट करना कोड के सैंपल में दिखाया गया है.

टेबल की सेल में कॉन्टेंट डालना

किसी टेबल सेल में लिखने के लिए, InsertTextRequest का इस्तेमाल करें. इसे उस सेल के location पर सेट करें जिसे आपको अपडेट करना है. अपडेट किए गए टेक्स्ट के हिसाब से, टेबल इंडेक्स में बदलाव होता है. DeleteContentRangeRequest की मदद से सेल का टेक्स्ट मिटाने पर भी यही नियम लागू होता है.

यहां दिए गए कोड सैंपल में, टेबल सेल में लिखने का तरीका बताया गया है:

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText("Hello")
        .setLocation(new Location().setIndex(5).setTabId(<var>TAB_ID</var>))));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response = docsService.documents()
        .batchUpdate(<var>DOCUMENT_ID</var>, body).execute();

Python

requests = [{
    'insertText': {
      'location': {
        'index': 5,
        'tabId': <var>TAB_ID</var>
      },
      'text': 'Hello'
    }
}]

result = service.documents().batchUpdate(documentId=<var>DOCUMENT_ID</var>, body={'requests': requests}).execute()

कॉलम की प्रॉपर्टी में बदलाव करना

UpdateTableColumnPropertiesRequest की मदद से, टेबल में मौजूद एक या उससे ज़्यादा कॉलम की प्रॉपर्टी में बदलाव किया जा सकता है.

आपको टेबल का शुरुआती इंडेक्स और TableColumnProperties ऑब्जेक्ट देना होगा. सिर्फ़ चुने गए कॉलम में बदलाव करने के लिए, अनुरोध में कॉलम नंबर की सूची शामिल करें. टेबल के सभी कॉलम में बदलाव करने के लिए, एक खाली सूची दें.

यहां दिए गए कोड के सैंपल में, टेबल की कॉलम की चौड़ाई अपडेट करने का तरीका दिखाया गया है. इसमें सभी कॉलम की चौड़ाई 100 पॉइंट पर सेट की गई है. इसके बाद, पहले कॉलम की चौड़ाई 200 पॉइंट पर सेट की गई है:

Java

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setUpdateTableColumnProperties(
            new UpdateTableColumnPropertiesRequest()
                .setTableStartLocation(
                    new Location()
                        .setIndex(2)
                        .setTabId(<var>TAB_ID</var>))
                .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(<var>TAB_ID</var>))
                .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(<var>DOCUMENT_ID</var>, body).execute();

Python

requests = [
  {
    'updateTableColumnProperties': {
      'tableStartLocation': {'index': 2, 'tabId': <var>TAB_ID</var>},
      'columnIndices': [],
      'tableColumnProperties': {
        'widthType': 'FIXED_WIDTH',
        'width': {
          'magnitude': 100,
          'unit': 'PT'
        }
      },
      'fields': '*'
    }
  },
  {
    'updateTableColumnProperties': {
      'tableStartLocation': {'index': 2, 'tabId': <var>TAB_ID</var>},
      'columnIndices': [0],
      'tableColumnProperties': {
        'widthType': 'FIXED_WIDTH',
        'width': {
          'magnitude': 200,
          'unit': 'PT'
        }
      },
      'fields': '*'
    }
  }
]

result = service.documents().batchUpdate(documentId=<var>DOCUMENT_ID</var>, body={'requests': requests}).execute()

लाइन की स्टाइल में बदलाव करना

UpdateTableRowStyleRequest की मदद से, टेबल की एक या उससे ज़्यादा लाइनों की स्टाइल में बदलाव किया जा सकता है.

आपको टेबल का शुरुआती इंडेक्स और TableRowStyle ऑब्जेक्ट देना होगा. सिर्फ़ चुनी गई लाइनों में बदलाव करने के लिए, अनुरोध में लाइन नंबर की सूची शामिल करें. टेबल की सभी लाइनों में बदलाव करने के लिए, एक खाली सूची दें.

यहां दिए गए कोड सैंपल में, टेबल की तीसरी लाइन की कम से कम ऊंचाई सेट करने का तरीका बताया गया है:

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(<var>TAB_ID</var>))
                .setRowIndices(rowIndices)
                .setTableRowStyle(
                    new TableRowStyle()
                        .setMinRowHeight(
                            new Dimension().setMagnitude(18d).setUnit("PT")))
                .setFields("*")));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(<var>DOCUMENT_ID</var>, body).execute();

Python

requests = [{
    'updateTableRowStyle': {
        'tableStartLocation': {'index': 2, 'tabId': <var>TAB_ID</var>},
        'rowIndices': [3],
        'tableRowStyle': {
            'minRowHeight': {
              'magnitude': 18,
              'unit': 'PT'
            }
        },
        'fields': '*'
    },
}
]

result = service.documents().batchUpdate(documentId=<var>DOCUMENT_ID</var>, body={'requests': requests}).execute()