টেবিলের সাথে কাজ করুন, টেবিলের সাথে কাজ করুন

এই ডকুমেন্টটিতে গুগল ডক্স এপিআই-তে টেবিল নিয়ে কীভাবে কাজ করতে হয় তা ব্যাখ্যা করা হয়েছে।

ডকস এপিআই আপনাকে টেবিলের বিষয়বস্তু সম্পাদনা করার সুযোগ দেয়। আপনি নিম্নলিখিত অপারেশনগুলো সম্পাদন করতে পারেন:

  • সারি, কলাম বা সম্পূর্ণ টেবিল যোগ করুন এবং মুছে ফেলুন।
  • টেবিলের সেলগুলোতে বিষয়বস্তু প্রবেশ করান।
  • টেবিলের সেলগুলো থেকে বিষয়বস্তু পড়ুন।
  • কলামের বৈশিষ্ট্য এবং সারিগুলোর স্টাইল পরিবর্তন করুন।

গুগল ডক্স-এ টেবিলকে ডকুমেন্টের মধ্যে এক ধরনের StructuralElement হিসেবে উপস্থাপন করা হয়। প্রতিটি Table TableRow ) অবজেক্টের একটি তালিকা থাকে, যেখানে প্রতিটি সারিতে TableCell ) অবজেক্টের একটি তালিকা থাকে। অন্যান্য সকল স্ট্রাকচারাল এলিমেন্টের মতোই, টেবিলেরও শুরু এবং শেষের ইনডেক্স (index) থাকে, যা ডকুমেন্টে টেবিলটির অবস্থান নির্দেশ করে। টেবিলের প্রোপার্টিগুলোর মধ্যে কলামের প্রস্থ (column width) এবং প্যাডিং (padding)-এর মতো অনেক স্টাইল এলিমেন্ট অন্তর্ভুক্ত থাকে।

উদাহরণ সারণী

নিম্নলিখিত JSON খণ্ডটিতে একটি 2x2 টেবিল দেখানো হয়েছে যেখান থেকে বেশিরভাগ বিবরণ বাদ দেওয়া হয়েছে:

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

নিম্নলিখিত সারণিটি একটি 2x2 টেবিলের প্রতিটি কাঠামোগত উপাদানের সূচক অফসেট দেখায়, এই ধরে নিয়ে যে টেবিলটি S সূচক থেকে শুরু হয় এবং সমস্ত ঘর খালি (প্রতিটিতে কেবল 1 দৈর্ঘ্যের একটি নিউলাইন অক্ষর \n রয়েছে):

উপাদান পথ সূচক শুরু করুন শেষ সূচী
টেবিল / S S + 12
টেবিল সারি 0 /rows[0] S + 1 S + 6
টেবিলসেল (0,0) /rows[0]/cells[0] S + 2 S + 4
অনুচ্ছেদ /rows[0]/cells[0]/p[0] S + 3 S + 4
টেবিলসেল (0,1) /rows[0]/cells[1] S + 4 S + 6
অনুচ্ছেদ /rows[0]/cells[1]/p[0] S + 5 S + 6
টেবিলের সারি ১ /rows[1] S + 6 S + 11
টেবিলসেল (1,0) /rows[1]/cells[0] S + 7 S + 9
অনুচ্ছেদ /rows[1]/cells[0]/p[0] S + 8 S + 9
টেবিলসেল (1,1) /rows[1]/cells[1] S + 9 S + 11
অনুচ্ছেদ /rows[1]/cells[1]/p[0] S + 10 S + 11

টেবিল সন্নিবেশ এবং মুছে ফেলা

কোনো ডকুমেন্টে টেবিল যোগ করতে InsertTableRequest ব্যবহার করুন। টেবিল সন্নিবেশ করার সময় আপনাকে অবশ্যই নিম্নলিখিত বিষয়গুলো উল্লেখ করতে হবে:

  • টেবিলের সারি এবং কলামের মাত্রা।
  • টেবিলটি সন্নিবেশ করার স্থান: এটি কোনো সেগমেন্টের (যেমন বডি, হেডার বা ফুটার) ভেতরের কোনো ইন্ডেক্স হতে পারে, অথবা সেগমেন্টটির শেষও হতে পারে। উভয় ক্ষেত্রেই নির্দিষ্ট ট্যাবটির আইডি অবশ্যই অন্তর্ভুক্ত থাকতে হবে।

বডির শেষে একটি টেবিল যুক্ত করতে, EndOfSegmentLocation অবজেক্টটি নির্দিষ্ট করুন এবং segmentId খালি রাখুন।

টেবিল মুছে ফেলার কোনো সুস্পষ্ট পদ্ধতি নেই। একটি ডকুমেন্ট থেকে টেবিল মুছে ফেলার জন্য, এটিকে অন্য যেকোনো কন্টেন্টের মতোই ব্যবহার করুন: DeleteContentRangeRequest ব্যবহার করুন এবং এমন একটি range উল্লেখ করুন যা পুরো টেবিলটিকে অন্তর্ভুক্ত করে।

নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে একটি খালি ডকুমেন্টের শেষে একটি 3x3 টেবিল সন্নিবেশ করতে হয়:

জাভা

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

পাইথন

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

নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে একটি টেবিলের শুরু এবং শেষের ইনডেক্স উল্লেখ করে টেবিলটি ডিলিট করতে হয়। এই নমুনাটি প্রদর্শন করে কিভাবে ডকুমেন্টের কন্টেন্ট থেকে এই ইনডেক্সগুলো পুনরুদ্ধার করতে হয়।

জাভা

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

পাইথন

# 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 ব্যবহার করুন।

নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে একটি বিদ্যমান টেবিলের প্রথম সেলে টেক্সট প্রবেশ করানো যায় এবং একটি টেবিল সারি যোগ করা যায়:

জাভা

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

পাইথন

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 টেবিলে একটি কলাম যুক্ত করতে হয়:

জাভা

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

পাইথন

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 অবজেক্টের একটি তালিকা থাকে। এই স্ট্রাকচারাল এলিমেন্টগুলোর প্রতিটিই টেক্সটসহ একটি প্যারাগ্রাফ বা অন্য কোনো ধরনের কাঠামো হতে পারে—এমনকি আরেকটি টেবিলও। টেবিলের বিষয়বস্তু পড়ার জন্য, আপনি প্রতিটি এলিমেন্টকে রিকার্সিভলি পরীক্ষা করতে পারেন, যেমনটি "ডক্স এপিআই ব্যবহার করে একটি ডকুমেন্ট থেকে টেক্সট নিষ্কাশন " কোড স্যাম্পলে দেখানো হয়েছে।

টেবিলের সেলগুলিতে বিষয়বস্তু প্রবেশ করান

টেবিলের কোনো সেলে লিখতে, আপনি যে সেলটি আপডেট করতে চান তার location একটি InsertTextRequest সেট করুন। আপডেট করা টেক্সটের জন্য টেবিলের ইনডেক্সগুলো সামঞ্জস্য হয়ে যায়। DeleteContentRangeRequest ব্যবহার করে সেলের টেক্সট মুছে ফেলার ক্ষেত্রেও একই নিয়ম প্রযোজ্য।

নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে একটি টেবিলের সেলে লিখতে হয়:

জাভা

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

পাইথন

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 অবজেক্ট প্রদান করতে হবে। শুধুমাত্র নির্বাচিত কলামগুলো পরিবর্তন করতে, অনুরোধে কলাম নম্বরগুলোর একটি তালিকা অন্তর্ভুক্ত করুন। টেবিলের সমস্ত কলাম পরিবর্তন করতে, একটি খালি তালিকা প্রদান করুন।

নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে একটি টেবিলের কলামের প্রস্থ আপডেট করতে হয়, যেখানে প্রথমে সমস্ত কলামের প্রস্থ ১০০ পয়েন্ট এবং তারপর প্রথম কলামের প্রস্থ ২০০ পয়েন্ট নির্ধারণ করা হয়েছে:

জাভা

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

পাইথন

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 অবজেক্টের সাথে টেবিলের শুরুর ইনডেক্স প্রদান করতে হবে। শুধুমাত্র নির্বাচিত সারিগুলো পরিবর্তন করতে, অনুরোধে সারি নম্বরের একটি তালিকা অন্তর্ভুক্ত করুন। টেবিলের সমস্ত সারি পরিবর্তন করতে, একটি খালি তালিকা প্রদান করুন।

নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে একটি টেবিলের তৃতীয় সারির সর্বনিম্ন উচ্চতা নির্ধারণ করতে হয়:

জাভা

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

পাইথন

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