टैब के साथ कार्य करना

Google Docs API की मदद से, दस्तावेज़ में मौजूद किसी भी टैब से कॉन्टेंट को ऐक्सेस किया जा सकता है.

टैब क्या होते हैं?

Google Docs में संगठन की एक लेयर होती है, जिसे टैब कहते हैं. Docs की मदद से उपयोगकर्ता, एक ही ईमेल में एक या उससे ज़्यादा टैब बना सकते हैं जिस तरह आज Sheets में टैब मौजूद हैं. हर टैब का अपनी टाइटल और आईडी (यूआरएल में जोड़ा गया). किसी टैब में चाइल्ड टैब भी हो सकते हैं, जो जो किसी अन्य टैब के नीचे नेस्ट किए गए टैब होते हैं.

फ़िलहाल, चाइल्ड टैब के लिए एपीआई की सुविधा उपलब्ध है. हालांकि, यूज़र इंटरफ़ेस (यूआई) के लिए सहायता जल्द ही उपलब्ध होगी. आज ही अपने कोड में चाइल्ड टैब को मैनेज किया जा सकता है, ताकि यूज़र इंटरफ़ेस (यूआई) सहायता लॉन्च होने पर आपको कोड को और अपडेट करने की ज़रूरत नहीं है.

दस्तावेज़ के संसाधन में दस्तावेज़ का कॉन्टेंट दिखाने के तरीके में बुनियादी बदलाव

पहले दस्तावेज़ों में टैब की अवधारणा नहीं होती थी, इसलिए Document संसाधन सीधे तौर पर शामिल है नीचे दिए गए फ़ील्ड में जाकर टेक्स्ट का सारा कॉन्टेंट:

टैब के अतिरिक्त संरचनात्मक पदानुक्रम के साथ, ये फ़ील्ड अब दस्तावेज़ में मौजूद सभी टैब के टेक्स्ट कॉन्टेंट को सिमेंटिक तौर पर दिखाएं. कॉन्टेंट बनाने टेक्स्ट-आधारित सामग्री को अब अलग लेयर में दिखाया जाता है. टैब प्रॉपर्टी और Google Docs में मौजूद कॉन्टेंट को document.tabs, जो Tab ऑब्जेक्ट, जिनमें से हर एक ऊपर दिए गए सभी टेक्स्ट कॉन्टेंट फ़ील्ड शामिल होते हैं. बाद के सेक्शन में खास जानकारी; यह Tab JSON को दिखाना और ज़्यादा जानकारी भी मिलती है.

टैब की प्रॉपर्टी ऐक्सेस करना

इसका इस्तेमाल करके टैब प्रॉपर्टी ऐक्सेस करें tab.tabProperties इसमें टैब का आईडी, टाइटल, और पोज़िशन जैसी जानकारी शामिल होती है.

टैब में मौजूद टेक्स्ट कॉन्टेंट को ऐक्सेस करना

टैब में मौजूद असली दस्तावेज़ का कॉन्टेंट इस तरह दिखता है tab.documentTab. सभी ऊपर दिए गए टेक्स्ट कॉन्टेंट फ़ील्ड को tab.documentTab का इस्तेमाल करके ऐक्सेस किया जा सकता है. उदाहरण के लिए, document.body का इस्तेमाल करने के बजाय, आपको document.tabs[indexOfTab].documentTab.body.

टैब की हैरारकी

चाइल्ड टैब को एपीआई में tab.childTabs फ़ील्ड चालू है Tab. सभी टैब तक पहुंचने के लिए दस्तावेज़ में "पेड़" को पार करने की ज़रूरत है की तरह दिखता है. उदाहरण के लिए, दस्तावेज़ में इस तरह टैब की हैरारकी है:

टैबलिस्ट यूज़र इंटरफ़ेस (यूआई) की इमेज, जिसमें टॉप-लेवल के तीन टैब हैं. इनमें से कुछ में चाइल्ड टैब भी हैं

Body को वापस पाने के लिए टैब 3.1.2 से, document.tabs[2].childTabs[0].childTabs[1].documentTab.body. सैंपल देखें बाद के सेक्शन में कोड ब्लॉक, जो दोहराने के लिए सैंपल कोड देता है एक्सट्रैक्ट किए जा सकते हैं.

तरीकों में बदलाव

टैब की शुरुआत होने के साथ ही, दस्तावेज़ के हर तरीके में कुछ बदलाव किए गए हैं इसके लिए आपको अपना कोड अपडेट करना पड़ सकता है.

documents.get

डिफ़ॉल्ट रूप से, टैब का पूरा कॉन्टेंट नहीं दिखता. डेवलपर को अपनी सभी टैब ऐक्सेस करने के लिए कोड. कॉन्टेंट बनाने documents.get तरीका दिखाता है कि includeTabsContent पैरामीटर की मदद से, यह कॉन्फ़िगर किया जा सकता है कि जवाब में सभी टैब दिए गए हैं.

  • अगर includeTabsContent को true पर सेट किया जाता है, तो documents.get तरीका पहले जैसा होगा एक Document संसाधन document.tabs फ़ील्ड में जानकारी अपने-आप भर गई है. सीधे document पर मौजूद सभी टेक्स्ट फ़ील्ड (उदाहरण के लिए, document.body) खाली के रूप में छोड़ दिया जाएगा.
  • अगर includeTabsContent नहीं दिया गया है, तो Document संसाधन (जैसे कि document.body) के टेक्स्ट फ़ील्ड सिर्फ़ पहले टैब के कॉन्टेंट से भरे जाएंगे. document.tabs फ़ील्ड खाली होगा और दूसरे टैब का कॉन्टेंट नहीं दिखाया जाएगा.

documents.create

documents.create तरीका यह Document संसाधन दिखाता है जो खाली दस्तावेज़ बनाया गया है. रिटर्न Document संसाधन, दस्तावेज़ के टेक्स्ट सामग्री फ़ील्ड और साथ ही खाली दस्तावेज़ सामग्री document.tabs.

document.batchUpdate

हर Request में शामिल है अपडेट लागू करने के लिए टैब तय करने का तरीका. डिफ़ॉल्ट रूप से, अगर कोई टैब बताया गया है, तो ज़्यादातर मामलों में Request केस, दस्तावेज़ के पहले टैब में लागू होंगे. ReplaceAllTextRequest DeleteNamedRangeRequest, और ReplaceNamedRangeContentRequest तीन विशेष अनुरोध हैं जो उनके बजाय सभी टैब पर डिफ़ॉल्ट रूप से लागू होंगे.

देखें Request से॰ दस्तावेज़ देखें.

उपयोगकर्ता किसी दस्तावेज़ में टैब, बुकमार्क, और हेडिंग के लिए इंटरनल लिंक बना सकते हैं. टैब की सुविधा शुरू किए जाने के साथ ही, link.bookmarkId और इसमें link.headingId फ़ील्ड Link संसाधन अब काम नहीं करेगा दस्तावेज़ के किसी खास टैब में बुकमार्क या हेडिंग को दिखाता हो.

link.bookmark का इस्तेमाल करने के लिए डेवलपर को अपना कोड अपडेट करना चाहिए और रीड और राइट ऑपरेशन में link.heading. वे इसका इस्तेमाल करके अंदरूनी लिंक दिखाते हैं BookmarkLink और HeadingLink ऑब्जेक्ट में से हर एक जिसमें बुकमार्क या हेडिंग का आईडी और उस टैब का आईडी शामिल हो इंच इसके अलावा, link.tabId टैब के इंटरनल लिंक दिखाता है.

documents.get का कॉन्टेंट लिंक करें includeTabsContent पैरामीटर के हिसाब से भी रिस्पॉन्स अलग-अलग हो सकता है:

  • अगर includeTabsContent को true पर सेट किया जाता है, तो सभी अंदरूनी लिंक दिखाए जाएंगे link.bookmark और link.heading के तौर पर. अब लेगसी फ़ील्ड इस्तेमाल नहीं किए जाएंगे.
  • अगर includeTabsContent नहीं दिया गया है, तो ऐसे दस्तावेज़ों में जिनमें एकल टैब, बुकमार्क के लिए कोई आंतरिक लिंक या उस एकवचन वाले टैब में मौजूद हेडिंग link.bookmarkId और link.headingId के तौर पर दिखेंगी. दस्तावेज़ों में जिसमें अनेक टैब शामिल हैं, आंतरिक लिंक link.bookmark के रूप में प्रदर्शित होंगे और link.heading.

document.batchUpdate में, अगर इंटरनल लिंक बनाने के लिए लेगसी फ़ील्ड, शीर्षक को Request. अगर कोई टैब नहीं है बताया गया है, तो इसे दस्तावेज़ के पहले टैब से माना जाएगा.

कॉन्टेंट बनाने JSON निरूपण लिंक करें से मिलता है ज़्यादा जानने के लिए.

टैब के इस्तेमाल के सामान्य पैटर्न

नीचे दिए गए कोड सैंपल, टैब के साथ इंटरैक्ट करने के अलग-अलग तरीकों के बारे में बताते हैं.

दस्तावेज़ के सभी टैब से टैब का कॉन्टेंट पढ़ें

जिस मौजूदा कोड ने टैब की सुविधा शुरू होने से पहले ऐसा किया था उसे सहायता ब्राउज़र पर माइग्रेट किया जा सकता है यह टैब चुनकर, includeTabsContent पैरामीटर को true पर सेट करता है. और गैटर मेथड को ऑफ़ Tab और DocumentTab के बजाय Document. निम्न आंशिक कोड सैंपल, किसी दस्तावेज़ से टेक्स्ट निकालें. यह दिखाता है किसी दस्तावेज़ के हर टैब से सभी टेक्स्ट कॉन्टेंट को प्रिंट करने का तरीका क्या है. यह टैब ट्रैवर्सल कोड को ऐसे कई और मामलों के लिए इस्तेमाल किया जा सकता है जिनमें असल ढांचा हो सकता है.

Java

/** Prints all text contents from all tabs in the document. */
static void printAllText(Docs service, String documentId) throws IOException {
  // Fetch the document with all of the tabs populated, including any nested
  // child tabs.
  Document doc =
      service.documents().get(documentId).setIncludeTabsContent(true).execute();
  List<Tab> allTabs = getAllTabs(doc);

  // Print the content from each tab in the document.
  for (Tab tab: allTabs) {
    // Get the DocumentTab from the generic Tab.
    DocumentTab documentTab = tab.getDocumentTab();
    System.out.println(
        readStructuralElements(documentTab.getBody().getContent()));
  }
}

/**
 * Returns a flat list of all tabs in the document in the order they would
 * appear in the UI (top-down ordering). Includes all child tabs.
 */
private List<Tab> getAllTabs(Document doc) {
  List<Tab> allTabs = new ArrayList<>();
  // Iterate over all tabs and recursively add any child tabs to generate a
  // flat list of Tabs.
  for (Tab tab: doc.getTabs()) {
    addCurrentAndChildTabs(tab, allTabs);
  }
  return allTabs;
}

/**
 * Adds the provided tab to the list of all tabs, and recurses through and
 * adds all child tabs.
 */
private void addCurrentAndChildTabs(Tab tab, List<Tab> allTabs) {
  allTabs.add(tab);
  for (Tab tab: tab.getChildTabs()) {
    addCurrentAndChildTabs(tab, allTabs);
  }
}

/**
 * Recurses through a list of Structural Elements to read a document's text
 * where text may be in nested elements.
 *
 * <p>For a code sample, see
 * <a href="https://developers.google.com/docs/api/samples/extract-text">Extract
 * the text from a document</a>.
 */
private static String readStructuralElements(List<StructuralElement> elements) {
  ...
}

दस्तावेज़ के पहले टैब में मौजूद टैब का कॉन्टेंट पढ़ें

यह सभी टैब को पढ़ने के समान है.

Java

/** Prints all text contents from the first tab in the document. */
static void printAllText(Docs service, String documentId) throws IOException {
  // Fetch the document with all of the tabs populated, including any nested
  // child tabs.
  Document doc =
      service.documents().get(documentId).setIncludeTabsContent(true).execute();
  List<Tab> allTabs = getAllTabs(doc);

  // Print the content from the first tab in the document.
  Tab firstTab = allTabs.get(0);
  // Get the DocumentTab from the generic Tab.
  DocumentTab documentTab = firstTab.getDocumentTab();
  System.out.println(
      readStructuralElements(documentTab.getBody().getContent()));
}

पहले टैब को अपडेट करने का अनुरोध करें

नीचे दिया गया आंशिक कोड का नमूना दिखाता है कि Request. यह कोड सैंपल पर आधारित है. टेक्स्ट डालना, मिटाना, और उसे एक जगह से दूसरी जगह ले जाना गाइड.

Java

/** Inserts text into the first tab of the document. */
static void insertTextInFirstTab(Docs service, String documentId)
    throws IOException {
  // Get the first tab's ID.
  Document doc =
      service.documents().get(documentId).setIncludeTabsContent(true).execute();
  Tab firstTab = doc.getTabs().get(0);
  String tabId = firstTab.getTabProperties().getTabId();

  List<Request>requests = new ArrayList<>();
  requests.add(new Request().setInsertText(
      new InsertTextRequest().setText(text).setLocation(new Location()
                                                            // Set the tab ID.
                                                            .setTabId(tabId)
                                                            .setIndex(25))));

  BatchUpdateDocumentRequest body =
      new BatchUpdateDocumentRequest().setRequests(requests);
  BatchUpdateDocumentResponse response =
      docsService.documents().batchUpdate(DOCUMENT_ID, body).execute();
}