Sekmelerle çalışma

Google Dokümanlar API'sı, dokümandaki herhangi bir sekmeden içeriğe erişmenize olanak tanır.

Sekme nedir?

Google Dokümanlar'da, sekmeler adında bir organizasyon katmanı bulunur. Dokümanlar, kullanıcıların tek bir sayfa içinde bir veya daha fazla sekme oluşturmasına olanak sağlar bugün E-Tablolar'da sekmelere benzer şekilde bir doküman oluşturabilirsiniz. Her sekmenin kendi başlığı ve kimliği (URL'ye eklenir) vardır. Bir sekmede, alt sekmeler gibi alt sekmeler sekmeleri görebilirsiniz.

Alt sekmeler için API desteği şu anda sunulmaktadır ancak kullanıcı arayüzü desteği yakında sunulacaktır. Kodunuzdaki alt sekmeleri şu anda işleyebilirsiniz. Böylece, kullanıcı arayüzü desteği kullanıma sunulduğunda kod güncellemesi yapmanız gerekmez.

Doküman içeriğinin Doküman Kaynağında temsil edilme biçiminde yapılan yapısal değişiklikler

Eskiden dokümanlarda sekme kavramı yoktu. Bu yüzden Document Doğrudan kontrol edilen kaynak aşağıdaki alanları kullanarak tüm metin içeriklerini doldurur:

Sekmelerin ek yapısal hiyerarşisi sayesinde, bu alanlar artık dokümanın tüm sekmelerindeki metin içeriğini anlamsal olarak temsil eder. İlgili içeriği oluşturmak için kullanılan metin tabanlı içerik artık farklı bir katmanda sunuluyor. Sekme özellikleri ve Google Dokümanlar'daki içeriğe yalnızca document.tabs Her biri Tab nesne yukarıda bahsedilen metin içeriği alanlarının tümünü içermelidir. Sonraki bölümlerde, kısa bir genel bakış; "the" Sekme JSON gösterimi daha ayrıntılı bilgi sağlar.

Sekme özelliklerine erişme

Sekme özelliklerine erişme: tab.tabProperties Örneğin, sekmenin kimliği, başlığı ve konumu gibi bilgiler içerir.

Sekme içindeki metin içeriğine erişme

Sekmedeki asıl doküman içeriği tab.documentTab. Tümü yukarıda belirtilen metin içeriği alanlarına tab.documentTab kullanılarak erişilebilir. Örneğin, document.body yerine document.tabs[indexOfTab].documentTab.body.

Sekme hiyerarşisi

Alt sekmeler API'de şu şekilde temsil edilir: tab.childTabs alanı açık Tab. Bir doküman "ağaç"tan geçiş yapılmasını gerektiriyor görebilirsiniz. Örneğin, aşağıdaki sekme hiyerarşisini içeren bir doküman düşünün:

Bazıları alt sekmelere sahip üç üst düzey sekme içeren sekme listesi kullanıcı arayüzü

Body şu yolu izleyin: Sekme 3.1.2 document.tabs[2].childTabs[0].childTabs[1].documentTab.body. Örneğe göz atın yineleme için örnek kod sağlayan sonraki bölümde yer alan kod blokları bir dokümandaki tüm sekmelerde kullanılabilir.

Yöntemlerdeki değişiklikler

Sekmelerin kullanıma sunulmasıyla her doküman yönteminde birkaç değişiklik yapıldı. veya kodunuzu güncellemeniz gerekebilir.

documents.get

Varsayılan olarak tüm sekme içerikleri döndürülmez. Geliştiriciler, kodu kullanabilirsiniz. İlgili içeriği oluşturmak için kullanılan documents.get yöntemi, includeTabsContent parametresi, yanıtta tüm sekmeler sağlanır.

  • includeTabsContent, true değerine ayarlanırsa documents.get yöntemi döndürülür Şu sorguya sahip Document: document.tabs alanı dolduruldu. Doğrudan document üzerindeki tüm metin alanları (ör. document.body) boş olarak bırakılır.
  • includeTabsContent sağlanmazsa Document Kaynağındaki (ör. document.body) metin alanları yalnızca ilk sekmedeki içeriklerle doldurulur. document.tabs alanı boş olur ve diğer sekmelerdeki içerikler döndürülmez.

documents.create

documents.create yöntemi Document Kaynağı döndürür oluşturulan boş dokümanı temsil eder. Döndürülen Document Kaynak, hem dokümanın metin içeriği alanlarında hem de document.tabs.

document.batchUpdate

Her Request şunları içerir: güncellemelerin uygulanacağı sekmeleri belirtmenin bir yoludur. Bir sekmenin varsayılan olarak belirtildiğinde, Request, çoğunlukla destek kayıtları, dokümandaki ilk sekmeye uygulanır. ReplaceAllTextRequest DeleteNamedRangeRequest, ve ReplaceNamedRangeContentRequest varsayılan olarak tüm sekmelere uygulanacak üç özel istektir.

Daha fazla bilgi için Request sn. dokümanlarına göz atabilirsiniz.

Kullanıcılar bir dokümandaki sekmelere, yer işaretlerine ve başlıklara dahili bağlantılar oluşturabilir. Kullanıma sunulan sekmeler özelliği sayesinde link.bookmarkId ve link.headingId alan Link kaynağı artık dokümandaki belirli bir sekmedeki bir yer işaretini veya başlığı temsil eder.

Geliştiriciler, kodlarını link.bookmark ve Okuma ve yazma işlemlerinde link.heading. Dahili bağlantıları BookmarkLink ve Her biri HeadingLink nesne yer işareti veya başlığın kimliğini ve bulunduğu sekmenin kimliğini içeren inç Ayrıca link.tabId, sekmelere dahili bağlantılar gösterir.

documents.get içeriğini bağlama yanıt, includeTabsContent parametresine bağlı olarak da değişiklik gösterebilir:

  • includeTabsContent, true olarak ayarlanırsa tüm dahili bağlantılar gösterilir link.bookmark ve link.heading olarak. Eski alanlar artık kullanılmayacak.
  • includeTabsContent sağlanmazsa tek bir sekme, o tek sekme içindeki yer işaretleri veya başlıkların dahili bağlantıları link.bookmarkId ve link.headingId olarak gösterilmeye devam eder. Dokümanlarda dahili bağlantılar link.bookmark olarak gösterilir ve link.heading.

document.batchUpdate bölgesinde, dahili bağlantı eski alanlardan biri, yer işareti veya başlığın, Request. Hiçbir sekme belirtilenden, dokümandaki ilk sekmeden olduğu kabul edilir.

İlgili içeriği oluşturmak için kullanılan Bağlantı JSON gösterimi, inceleyebilirsiniz.

Sekmelerin yaygın kullanım şekilleri

Aşağıdaki kod örneklerinde, sekmelerle etkileşimde bulunmanın çeşitli yolları açıklanmaktadır.

Dokümandaki tüm sekmelerden sekme içeriğini oku

Sekmeler özelliğinden önce bunu yapan mevcut kod destek ekibine taşınabilir includeTabsContent parametresini true değerine ayarlayarak ve ve alıcı yöntemlerini Tab ve DocumentTab yerine Document. Aşağıdaki kısmi kod örneği şu adresteki snippet'e göredir: Belgedeki metni çıkarın. Bu sonuçta bir dokümandaki tüm sekmelerdeki tüm metin içeriklerinin nasıl yazdırılacağını öğreneceğiz. Bu sekme geçiş kodu, zaman çizelgesine uymayan pek çok kullanım sekmelerin gerçek yapısı.

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) {
  ...
}

Dokümandaki ilk sekmeden sekme içeriğini oku

Bu işlem, tüm sekmeleri okumaya benzer.

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

İlk sekmeyi güncelleme isteğinde bulunma

Aşağıdaki kısmi kod örneği, Request. Bu kod örneklemi temel alır. Metin ekleme, silme ve taşıma Rehber.

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