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:
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:
Document.addBookmark(position)
Document.addFooter()
Document.addHeader()
Document.addNamedRange(name, range)
Document.getBody()
Document.getBookmark(id)
Document.getBookmarks()
Document.getFooter()
Document.getFootnotes()
Document.getHeader()
Document.getNamedRangeById(id)
Document.getNamedRanges()
Document.getNamedRanges(name)
Document.newPosition(element, offset)
Document.newRange()
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:
Document.getActiveTab()
: Etkin dokümandaki kullanıcının etkinTab
değerini döndürür.Document.setActiveTab(tabId)
: Kullanıcının geçerli dokümandaki seçiliTab
ayarını belirtilen kimlik.
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ğini yazdırmak için kullanılır. 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, yeni bir sekme açılırken 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, oluşturma işlemi sırasında 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()); } }