Sekmelerle çalışma

Google Dokümanlar için Apps Komut Dosyası, herhangi bir yerden sekmesine ekleyin.

Sekme nedir?

Google Dokümanlar'da, sekmeler adında bir organizasyon katmanı bulunur. Dokümanlar Google Etiket Yöneticisi'ne benzer şekilde, kullanıcıların tek bir doküman içinde bir veya daha fazla bugün E-Tablolar'da sekmeler var. Her sekmenin kendine ait bir başlığı ve kimliği vardır ( ekleyin). Bir sekme, iç içe yerleştirilmiş sekmeler olan alt sekmeler içerebilir tıklayın.

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.

Sekmelere Eriş

Sekme özelliklerine ve içeriğine şunlarla erişilebilir: Document.getTabs() Bu, Tab listesini döndürür. Sonraki bölümlerde, genel hatlarıyla Tab sınıf; Sekme sınıfı dokümanları daha ayrıntılı bilgi sağlar.

Sekme özellikleri

Sekme özellikleri, Tab.getId() ve Tab.getTitle().

Sekme içerikleri

Her bir sekmedeki doküman içeriği şu komutla alınabilir: Tab.asDocumentTab(). Doküman Sınıfı yapısında yapılan değişiklikler bölümünde bunun nasıl kullanılabileceği açıklanmaktadır.

Sekme hiyerarşisi

Alt sekmeler, Google Apps Komut Dosyası'nda Tab.getChildTabs(). Tüm sekmelerden içeriğe erişmek için "ağaç" üzerinden geçiş yapılması gerekir görebilirsiniz. Örneğin, aşağıdaki gibi bir sekme hiyerarşisi içeren bir dokümanı ele alalım:

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

Sekme 3.1.2'ye erişmek için aşağıdakileri yapabilirsiniz:

// Print the ID of Tab 3.1.2.
const doc = DocumentApp.getActiveDocument();
const tab = doc.getTabs()[2].getChildTabs()[0].getChildTabs()[1];
console.log(tab.getId());

İlerleyen bölümlerde aşağıdaki örnek kod bloklarına göz atın. Bu bloklar, yinelemeli bir dokümandaki tüm sekmelerde.

Sekmeleri almanın diğer yolları

Sekmeleri almanın iki yolu daha vardır:

  • Document.getTab(tabId): Belirtilen kimliğe sahip Sekme'yi döndürür.
  • Document.getActiveTab(): Kullanıcının etkin sekmesini döndürür. Yalnızca şuralarda çalışır: bir dokümana bağlı komut dosyaları oluşturun. İlgili içeriği oluşturmak için kullanılan sonraki bölümlerde bu daha ayrıntılı olarak açıklanmaktadır.

Doküman Sınıfı yapısındaki değişiklikler

Eskiden dokümanlarda sekme kavramı yoktu. Bu nedenle, Doküman Sınıfı dokümanın metin içeriğine doğrudan erişmek ve içeriği değiştirmek için açıkta kalan yöntemleri kullanabilirsiniz. Aşağıdaki yöntemler bu kategoriye girer:

Sekmelerin ek yapısal hiyerarşisi nedeniyle, bu yöntemler artık dokümanın tüm sekmelerindeki metin içeriğini anlamsal olarak temsil eder. Metin içerik artık farklı bir katmanda gösterilecek; yukarıda sözü edilen tüm metin yöntemlerine DocumentTab üzerinden erişilebiliyor.

Document sınıfındaki bu mevcut yöntemler içeriğe erişir veya içeriği değiştirir etkin sekmeden (komut dosyalarında: bağlı) belirli bir doküman) veya ilk sekme (etkin bir doküman yoksa) tıklayın.

Belirli bir sekmedeki metin içeriğine erişme

Document dışındaki metin yöntemlerini kullanmak yerine bunun yerine DocumentTab sınıfının dışında kullanılabilen yöntemler (yani şuradan erişilebilir: Tab.asDocumentTab() yöntemini) kullanın. Örneğin:

// Print the text from the body of the active tab.
const doc = DocumentApp.getActiveDocument();
const documentTab = doc.getActiveTab().asDocumentTab();
const body = documentTab.getBody();
console.log(body.getText());

Kullanıcı seçiminde yapılan değişiklikler

Metin seçme yöntemleri

Document sınıfı, metnin neresini yöneteceklerini belirleyen ve belirleyicileri sağlar. kullanıcının seçtiği etkin dokümanda yer alır. Bu yöntemler komut dosyasını çalıştıran kullanıcının etkin sekmesinin bağlamını gösterir.

  • Document.getCursor(): Kullanıcının etkin sekmedeki imleç konumunu döndürür.
  • Document.getSelection(): Etkin sekmesinde kullanıcının seçim aralığını döndürür.
  • Document.setCursor(position): Kullanıcının etkin dokümanda imleç konumunu ayarlar. Konum kullanıcının etkin olmayan sekmesi de ilişkili sekmeye geçer birlikte çalışır.
  • Document.setSelection(range): Etkin dokümandaki kullanıcının seçim aralığını ayarlar. Aralık kullanıcının etkin olmayan sekmesi de ilişkili sekmeye geçer otomatik olarak seçeceğim.

Sekme seçme yöntemleri ve kullanım alanları

Sekmelerin kullanıma sunulmasıyla birlikte, komut dosyasını çalıştıran kullanıcıdır. Bu, aşağıdaki yöntemler kullanılarak yapılabilir:

Kullanıcının bütünsel "seçimi" etkin sekmenin bir kombinasyonundan oluşur imleç konumu veya seçim aralığıyla birlikte. İkisi belirli bir model üzerinde çalışmak için, etkin bir seçimle Kullanıcının etkin sekmesini belirli bir sekmeye yönlendirebilir veya kullanıcının etkin sekmesini kullanabilirsiniz.

Kullanıcının etkin sekmesinin açık bir şekilde değiştirilmesi için Document.setActiveTab(tabId). Alternatif olarak Document.setCursor(position) veya Document.setSelection(range) etkin olmayan bir sekmeden Position veya Range ile bu sekmeyi yeni yapar etkin.

Komut dosyasının amacı kullanıcının etkin sekmesini kullanmaksa uygulamadan sonra Document.setActiveTab(tabId) gerekmez. İlgili içeriği oluşturmak için kullanılan Document.getCursor() ve Document.getSelection() yöntemlerinin halihazırda etkin sekmede kullanıcı tarafından kullanılan bir kaynaktır.

Bir dokümanın birden fazla sekme seçimini veya birden fazla sekme seçimini desteklemediğini unutmayın farklı sekmelerde konumları veya aralıkları belirleyebilirsiniz. Dolayısıyla, Document.setActiveTab(tabId) önceki imleç konumunu veya seçim aralığını siler.

Belirli bir sekme için konum ve aralık yöntemleri

Belirli bir sekmedeki metin seçimi kavramlarını anlamlandıran Position ve Range. Başka bir deyişle, imleç konumu veya seçim aralığı yalnızca komut dosyası, konumun veya reklam içeriğinin değiştirileceği belirli bir sekmeyi olduğunu unutmayın.

Bu, DocumentTab.newPosition(element, offset) ve DocumentTab.newRange() belirli kullanıcıları hedefleyen bir Konum veya Aralık oluşturan yöntemin çağrıldığı DocumentTab. Öte yandan Document.newPosition(element, offset) ve Document.newRange() bir Konum veya Aralık oluşturur. Bu şekilde, etkin sekmeyi (veya ilk sekmesinden yararlanın.

İlerleyen bölümlerde aşağıdaki örnek kod bloklarına göz atın. Bu bloklar, yapmanızı sağlayan sorular.

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 Tab ve Tab haricindeki alıcı yöntemlerini çağırarak sekme ağacını gezin Document yerine DocumentTab. Aşağıdaki kısmi kod örneğinde, bir dokümandaki her sekmedeki tüm metin içeriğinin yazdırılmasını sağlayabilirsiniz. Bu sekme geçiş kodu, zaman çizelgesine uymayan pek çok kullanım sekmelerin gerçek yapısı.

/** Logs all text contents from all tabs in the active document. */
function logAllText() {
  // Generate a list of all the tabs in the document, including any
  // nested child tabs. DocumentApp.openById('abc123456') can also
  // be used instead of DocumentApp.getActiveDocument().
  const doc = DocumentApp.getActiveDocument();
  const allTabs = getAllTabs(doc);

  // Log the content from each tab in the document.
  for (const tab of allTabs) {
    // Get the DocumentTab from the generic Tab object.
    const documentTab = tab.asDocumentTab();
    // Get the body from the given DocumentTab.
    const body = documentTab.getBody();
    // Get the body text and log it to the console.
    console.log(body.getText());
  }
}

/**
 * Returns a flat list of all tabs in the document, in the order
 * they would appear in the UI (i.e. top-down ordering). Includes
 * all child tabs.
 */
function getAllTabs(doc) {
  const allTabs = [];
  // Iterate over all tabs and recursively add any child tabs to
  // generate a flat list of Tabs.
  for (const tab of 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.
 */
function addCurrentAndChildTabs(tab, allTabs) {
  allTabs.push(tab);
  for (const childTab of tab.getChildTabs()) {
    addCurrentAndChildTabs(childTab, allTabs);
  }
}

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

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

/** 
 * Logs all text contents from the first tab in the active 
 * document. 
 */
function logAllText() {
  // Generate a list of all the tabs in the document, including any
  // nested child tabs.
  const doc = DocumentApp.getActiveDocument();
  const allTabs = getAllTabs(doc);

  // Log the content from the first tab in the document.
  const firstTab = allTabs[0];
  // Get the DocumentTab from the generic Tab object.
  const documentTab = firstTab.asDocumentTab();
  // Get the body from the DocumentTab.
  const body = documentTab.getBody();
  // Get the body text and log it to the console.
  console.log(body.getText());
}

İlk sekmedeki sekme içeriğini güncelleyin

Aşağıdaki kısmi kod örneğinde, bir satır öğesi oluştururken belirli bir sekmenin güncellemelerine göz atın.

/** Inserts text into the first tab of the active document. */
function insertTextInFirstTab() {
  // Get the first tab's body.
  const doc = DocumentApp.getActiveDocument();
  const firstTab = doc.getTabs()[0];
  const firstDocumentTab = firstTab.asDocumentTab();
  const firstTabBody = firstDocumentTab.getBody();

  // Append a paragraph and a page break to the first tab's body
  // section.
  firstTabBody.appendParagraph("A paragraph.");
  firstTabBody.appendPageBreak();
}

Etkin veya seçili sekmedeki sekme içeriğini güncelle

Aşağıdaki kısmi kod örneğinde, bir satır öğesi oluştururken etkin sekmenin nasıl hedefleneceği güncellemelerine göz atın.

/**
 * Inserts text into the active/selected tab of the active
 * document.
 */
function insertTextInActiveTab() {
  // Get the active/selected tab's body.
  const doc = DocumentApp.getActiveDocument();
  const activeTab = doc.getActiveTab();
  const activeDocumentTab = activeTab.asDocumentTab();
  const activeTabBody = activeDocumentTab.getBody();

  // Append a paragraph and a page break to the active tab's body
  // section.
  activeTabBody.appendParagraph("A paragraph.");
  activeTabBody.appendPageBreak();
}

Etkin sekmede imleç konumunu veya seçim aralığını ayarlayın

Aşağıdaki kısmi kod örneğinde, imleç konumunun veya Kullanıcının etkin sekmesindeki seçim aralığı. Bu yalnızca sınırdakilerle alakalı komut dosyaları.

/**
 * Changes the user's selection to select all tables within the tab
 * with the provided ID.
 */
function selectAllTables(tabId) {
  const doc = DocumentApp.getActiveDocument();
  const tab = doc.getTab(tabId);
  const documentTab = tab.asDocumentTab();

  // Build a range that encompasses all tables within the specified
  // tab.
  const rangeBuilder = documentTab.newRange();
  const tables = documentTab.getBody().getTables();
  for (let i = 0; i < tables.length; i++) {
    rangeBuilder.addElement(tables[i]);
  }
  // Set the document's selection to the tables within the specified
  // tab. Note that this actually switches the user's active tab as
  // well.
  doc.setSelection(rangeBuilder.build());
}

Etkin veya seçili sekmeyi ayarlama

Aşağıdaki kısmi kod örneğinde, kullanıcının etkin sekmesinin nasıl değiştirileceği gösterilmektedir. Bu, yalnızca bağlı komut dosyalarında geçerlidir.

/**
 * Changes the user's selected tab to the tab immediately following
 * the currently selected one. Handles child tabs.
 *
 * 

Only changes the selection if there is a tab following the * currently selected one. */ function selectNextTab() { const doc = DocumentApp.getActiveDocument(); const allTabs = getAllTabs(doc); const activeTab = doc.getActiveTab(); // Find the index of the currently active tab. let activeTabIndex = -1; for (let i = 0; i < allTabs.length; i++) { if (allTabs[i].getId() === activeTab.getId()) { activeTabIndex = i; } } // Update the user's selected tab if there is a valid next tab. const nextTabIndex = activeTabIndex + 1; if (nextTabIndex < allTabs.length) { doc.setActiveTab(allTabs[nextTabIndex].getId()); } }