Google E-Tablolar; AVERAGE
, SUM
ve VLOOKUP
gibi yüzlerce yerleşik işlev sunar. Bunlar sizin ihtiyaçlarınız için yeterli olmadığında, özel işlevler yazmak için Google Apps Komut Dosyası'nı kullanabilirsiniz (örneğin, metreye dönüştürme veya internetten canlı içerik getirme), ardından bunları Google E-Tablolar'da yerleşik bir işlev gibi kullanabilirsiniz.
Kullanmaya başlama
Özel işlevler standart JavaScript kullanılarak oluşturulur. JavaScript'i kullanmaya yeni başladıysanız Codecademy yeni başlayanlar için harika bir kurs sunuyor. (Not: Bu kurs Google tarafından geliştirilmemiş ve Google ile ilişkili değildir.)
Bir giriş değerini 2 ile çarpan DOUBLE
adlı basit bir özel işlevi burada bulabilirsiniz:
/**
* Multiplies an input value by 2.
* @param {number} input The number to double.
* @return The input multiplied by 2.
* @customfunction
*/
function DOUBLE(input) {
return input * 2;
}
JavaScript'i nasıl yazacağınızı bilmiyorsanız ve öğrenmek için zamanınız yoksa ihtiyacınız olan özel işlevi başka birinin oluşturup oluşturmadığını görmek için eklenti mağazasını kontrol edin.
Özel işlev oluşturma
Özel bir işlev yazmak için:
- Google E-Tablolar'da bir e-tablo oluşturun veya mevcut bir e-tabloyu açın.
- Uzantılar > Apps Komut Dosyası menü öğesini seçin.
- Komut dosyası düzenleyicisindeki tüm kodları silin. Yukarıdaki
DOUBLE
işlevi için kodu kopyalayıp komut dosyası düzenleyiciye yapıştırmanız yeterlidir. - Üstte, Kaydet'i tıklayın.
Artık özel işlevi kullanabilirsiniz.
Google Workspace Marketplaceişlevinden özel işlev alma
Google Workspace Marketplace Google E-Tablolar için eklenti olarak çeşitli özel işlevler sunar. Bu eklentileri kullanmak veya keşfetmek için:
- Google E-Tablolar'da bir e-tablo oluşturun veya mevcut bir e-tabloyu açın.
- En üstte Eklentiler > Eklenti al'ı tıklayın.
- Google Workspace Marketplace açıldıktan sonra sağ üst köşedeki arama kutusunu tıklayın.
- "Özel işlev" yazıp Enter tuşuna basın.
- İlgilendiğiniz bir özel işlev eklentisi bulursanız Yükle'yi tıklayarak yükleyin.
- Eklentinin yetkilendirme gerektirdiğini söyleyen bir iletişim kutusu vardır. Bu durumda, bildirimi dikkatli bir şekilde okuyun ve ardından İzin ver'i tıklayın.
- Eklenti e-tabloda kullanılabilir hale gelir. Eklentiyi farklı bir e-tabloda kullanmak için diğer e-tabloyu açın ve en üstte Eklentiler > Eklentileri yönet'i tıklayın. Kullanmak istediğiniz eklentiyi bulun ve Seçenekler > Bu dokümanda kullan'ı tıklayın.
Özel işlev kullanma
Özel bir işlev yazdıktan veyaGoogle Workspace Marketplaceişlevinden bir işlev yükledikten sonra, yerleşik işlev olarak kullanmak çok kolaydır:
- İşlevi kullanmak istediğiniz hücreyi tıklayın.
- Eşittir işareti (
=
) ve ardından işlev adını ve herhangi bir giriş değerini (ör.=DOUBLE(A1)
) yazıp Enter tuşuna basın. - Hücre geçici olarak
Loading...
dosyasını gösterir, ardından sonucu döndürür.
Özel işlevler için yönergeler
Kendi özel işlevinizi yazmadan önce bilmeniz gereken birkaç nokta vardır.
Adlandırma
JavaScript işlevlerini adlandırmayla ilgili standart kurallara ek olarak, aşağıdakilere dikkat edin:
- Özel işlevlerin adları,
SUM()
gibi yerleşik işlevlerin adlarından farklı olmalıdır. - Özel işlevin adı, Apps Komut Dosyası'ndaki özel bir işlevi gösteren alt çizgi (
_
) ile bitemez. - Özel işlevin adı
var myFunction = new Function()
değil,function myFunction()
söz dizimiyle tanımlanmalıdır. - E-tablo işlevlerinin adları geleneksel olarak büyük harfle yazılsa da büyük harf kullanımı önemli değildir.
Bağımsız değişkenler
Yerleşik işlevler gibi özel işlevler de giriş değeri olarak bağımsız değişkenleri alabilir:
- İşlevinizi bağımsız değişken olarak tek bir hücreye başvuruyla (
=DOUBLE(A1)
gibi) çağırırsanız bağımsız değişken hücrenin değeri olur. İşlevinizi, bağımsız değişken olarak bir hücre aralığına (
=DOUBLE(A1:B10)
gibi) başvurursanız bağımsız değişken, hücrelerin değerlerini içeren iki boyutlu bir dizi olur. Örneğin, aşağıdaki ekran görüntüsünde yer alan,=DOUBLE(A1:B2)
bağımsız değişkeni Apps Komut Dosyası tarafındandouble([[1,3],[2,4]])
olarak yorumlanmıştır. YukarıdanDOUBLE
için örnek kodun bir diziyi giriş olarak kabul edecek şekilde değiştirilmesi gerektiğini unutmayın.Özel işlev bağımsız değişkenleri belirleyici olmalıdır. Diğer bir deyişle, her hesaplamalarında farklı bir sonuç döndüren yerleşik e-tablo işlevlerine (
NOW()
veyaRAND()
gibi) özel bir işlev için bağımsız değişken olarak izin verilmez. Özel işlev, bu değişken yerleşik işlevlerden birine dayalı bir değer döndürmeye çalışırsa süresiz olarakLoading...
gösterir.
Döndürülen değerler
Her özel işlev görüntülenecek bir değer döndürmelidir. Örneğin:
- Özel işlevler bir değer döndürürse değer, işlevin çağrıldığı hücrede görüntülenir.
- Özel işlevler iki boyutlu bir değer dizisi döndürürse bu hücreler boş olduğu sürece değerler bitişik hücrelere taşar. Bu, dizinin mevcut hücre içeriğinin üzerine yazmasına neden oluyorsa özel işlev bunun yerine bir hata atar. Örnek için özel işlevleri optimize etme bölümüne bakın.
- Özel işlevler, değer döndürdüğü hücrelerin dışındaki hücreleri etkileyemez. Başka bir deyişle, özel işlevler yalnızca rastgele hücreleri, aradıkları hücreler ve bunların bitişiğindeki hücreleri düzenleyemez. Rastgele hücreleri düzenlemek için bunun yerine bir işlev çalıştırmak için özel menü kullanın.
- Özel işlevler için yapılan çağrılar 30 saniye içinde iade edilir. Aksi takdirde hücrede bir hata görüntülenir:
Internal error executing the custom function.
Veri türleri
Google E-Tablolar, verilerin yapısına bağlı olarak verileri farklı biçimlerde depolar. Bu değerler özel işlevlerde kullanıldığında Apps Komut Dosyası tarafından JavaScript'te uygun veri türü olarak kabul edilir. Kafa karışıklığına yol açan en yaygın alanlar şunlardır:
- E-Tablolar'daki saatler ve tarihler Apps Komut Dosyası'nda Tarih nesneleri haline gelir. E-tablo ve komut dosyası farklı saat dilimleri kullanıyorsa (nadiren bir sorun) özel işlevin bunu telafi etmesi gerekir.
- E-Tablolar'daki süre değerleri de
Date
nesnesi haline gelir, ancak onlarla çalışmak karmaşık olabilir. - E-Tablolar'daki yüzde değerleri Apps Komut Dosyası'nda ondalık sayılar haline gelir. Örneğin,
10%
değerine sahip bir hücre Apps Komut Dosyası'nda0.1
haline geliyor.
Otomatik tamamlama
Google E-Tablolar, yerleşik işlevlere çok benzer şekilde özel işlevler için otomatik tamamlamayı destekler. Bir hücreye işlev yazarken siz yazdıklarınızla eşleşen yerleşik ve özel işlevlerin listesini görürsünüz.
Komut dosyası, aşağıdaki DOUBLE()
örneğinde olduğu gibi bir JsDoc
@customfunction
etiketi içeriyorsa bu listede görünür.
/**
* Multiplies the input value by 2.
*
* @param {number} input The value to multiply.
* @return The input multiplied by 2.
* @customfunction
*/
function DOUBLE(input) {
return input * 2;
}
Gelişmiş
Google Apps Komut Dosyası hizmetlerini kullanma
Özel işlevler, daha karmaşık görevleri gerçekleştirmek için belirli Google Apps Komut Dosyası hizmetlerini çağırabilir. Örneğin, özel işlevler, İngilizce ifadeleri İspanyolcaya çevirmek için Language hizmetini çağırabilir.
Diğer çoğu Apps Komut Dosyası türünün aksine özel işlevler hiçbir zaman kullanıcılardan kişisel verilere erişim yetkisi vermelerini istemez. Sonuç olarak, yalnızca aşağıdakiler dahil olmak üzere kişisel verilere erişimi olmayan hizmetleri arayabilirler:
Desteklenen hizmetler | Notlar |
---|---|
Önbellek | Çalışır, ancak özel işlevlerde özellikle yararlı değildir |
HTML | HTML oluşturabilir, ancak görüntülenemez (nadiren yararlıdır) |
JDBC | |
Language | |
Kilitle | Çalışır, ancak özel işlevlerde özellikle yararlı değildir |
Haritalar | Yol tariflerini hesaplayabilir ancak haritaları görüntüleyemez |
Mülkler | getUserProperties() yalnızca e-tablo sahibinin özelliklerini alır. E-tablo düzenleyicileri özel bir işlevdeki kullanıcı özelliklerini ayarlayamaz. |
E-tablo | Salt okuma (çoğu get*() yöntemini kullanabilir, ancak set*() kullanamaz).Diğer e-tabloları açamaz ( SpreadsheetApp.openById()
veya SpreadsheetApp.openByUrl() ). |
URL Getirme | |
Yardımcı programlar | |
XML |
Özel işleviniz You do not have permission to
call X service.
hata mesajını verirse hizmet kullanıcı yetkilendirmesi gerektirir. Bu nedenle özel bir işlevde kullanılamaz.
Yukarıda listelenenler dışında bir hizmeti kullanmak için özel bir işlev yazmak yerine Apps Komut Dosyası işlevini çalıştıran bir özel menü oluşturun. Menüden tetiklenen bir işlev, gerektiğinde kullanıcıdan yetkilendirme ister ve bunun sonucunda tüm Apps Komut Dosyası hizmetlerini kullanabilir.
Paylaşım
Özel işlevler, başlangıçta oluşturuldukları e-tabloya bağlıdır. Bu, aşağıdaki yöntemlerden birini kullanmadığınız sürece bir e-tabloda yazılan özel işlevin diğer e-tablolarda kullanılamayacağı anlamına gelir:
- Komut dosyası düzenleyiciyi açmak için Uzantılar > Apps Komut Dosyası'nı tıklayın, ardından komut dosyası metnini orijinal e-tablodan kopyalayıp başka bir e-tablonun komut dosyası düzenleyicisine yapıştırın.
- Dosya > Kopya oluştur'u tıklayarak özel işlevi içeren e-tablonun bir kopyasını oluşturun. Kopyalanan bir e-tablo, ona eklenen tüm komut dosyaları da kopyalanır. E-tabloya erişimi olan herkes komut dosyasını kopyalayabilir. (Yalnızca görüntüleme erişimine sahip olan ortak çalışanlar orijinal e-tabloda komut dosyası düzenleyiciyi açamaz. Ancak, bir kopya oluşturduğunda kopyanın sahibi olur ve komut dosyasını görebilir.)
- Komut dosyasını Google E-Tablolar Düzenleyici Eklenti olarak yayınlayın.
Optimizasyon
Bir e-tabloda her özel işlev kullanıldığında Google E-Tablolar, Apps Komut Dosyası sunucusuna ayrı bir çağrı yapar. E-tablonuzda onlarca (veya yüzlerce, hatta binlerce!) özel işlev çağrısı varsa bu işlem oldukça yavaş olabilir.
Sonuç olarak, özel bir işlevi çok sayıda veride birden fazla kez kullanmayı planlıyorsanız işlevi iki aralıklı dizi biçiminde bir aralık olarak kabul eden ve ardından uygun hücrelere taşabilecek iki boyutlu bir dizi döndürecek şekilde değiştirmeyi düşünebilirsiniz.
Örneğin, yukarıda gösterilen DOUBLE()
işlevi, tek bir hücreyi veya hücre aralığını kabul etmek için aşağıdaki gibi yeniden yazılabilir:
/**
* Multiplies the input value by 2.
*
* @param {number|Array<Array<number>>} input The value or range of cells
* to multiply.
* @return The input multiplied by 2.
* @customfunction
*/
function DOUBLE(input) {
return Array.isArray(input) ?
input.map(row => row.map(cell => cell * 2)) :
input * 2;
}
Yukarıdaki yaklaşım, iki boyutlu hücre dizisindeki her değerde DOUBLE
öğesini tekrarlı olarak çağırmak için JavaScript'in Array
nesnesinin map yöntemini kullanır. Sonuçları içeren iki boyutlu bir diziyi döndürür. Bu şekilde, aşağıdaki ekran görüntüsünde gösterildiği gibi, DOUBLE
işlevini yalnızca bir kez çağırabilir ve çok sayıda hücre için aynı anda hesaplamasını sağlayabilirsiniz. (Aynı işlemi map
çağrısı yerine iç içe yerleştirilmiş if
ifadeleriyle de gerçekleştirebilirsiniz.)
Benzer şekilde aşağıdaki özel işlev, canlı içeriği internetten verimli bir şekilde getirir ve tek boyutlu bir işlev çağrısıyla iki sütun sütunu görüntülemek için iki boyutlu bir dizi kullanır. Her hücrenin kendi işlev çağrısını gerektirmesi halinde, Apps Komut Dosyası sunucusunun her defasında XML feed'ini indirmesi ve ayrıştırması gerekeceğinden işlem çok daha fazla zaman alır.
/**
* Show the title and date for the first page of posts on the
* Developer blog.
*
* @return Two columns of data representing posts on the
* Developer blog.
* @customfunction
*/
function getBlogPosts() {
var array = [];
var url = 'https://gsuite-developers.googleblog.com/atom.xml';
var xml = UrlFetchApp.fetch(url).getContentText();
var document = XmlService.parse(xml);
var root = document.getRootElement();
var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
var entries = document.getRootElement().getChildren('entry', atom);
for (var i = 0; i < entries.length; i++) {
var title = entries[i].getChild('title', atom).getText();
var date = entries[i].getChild('published', atom).getValue();
array.push([title, date]);
}
return array;
}
Bu teknikler bir e-tabloda tekrar tekrar kullanılan neredeyse tüm özel işlevlere uygulanabilir ancak işlevin davranışına bağlı olarak uygulama ayrıntıları değişiklik gösterir.