Google E-Tablolar, AVERAGE
, SUM
ve VLOOKUP
gibi yüzlerce yerleşik işlev sunar. Bunlar ihtiyaçlarınız için yeterli değilse Google Apps Komut Dosyası'nı kullanarak özel işlevler yazabilirsiniz (ör. metreleri mil olarak dönüştürmek veya İnternet'ten canlı içerik almak). Ardından bu işlevleri Google E-Tablolar'da yerleşik işlevler gibi kullanabilirsiniz.
Başlarken
Özel işlevler standart JavaScript kullanılarak oluşturulur. JavaScript'te yeniyseniz Codecademy'nin yeni başlayanlar için mükemmel bir kursu var. (Not: Bu kurs Google tarafından geliştirilmemiştir ve Google ile ilişkili değildir.)
Giriş değerini 2 ile çarpan DOUBLE
adlı basit bir özel işlev aşağıda verilmiştir:
/**
* 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 açın.
- Uzantılar > Apps Komut Dosyası menü öğesini seçin.
- Komut dosyası düzenleyicideki 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 Marketplacekaynağından ö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 açın.
- Ü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ın ve Enter tuşuna basın.
- İlgilendiğiniz bir özel işlev eklentisi bulursanız yüklemek için Yükle'yi tıklayın.
- Eklentinin yetkilendirme gerektirdiğini belirten bir iletişim kutusu görebilirsiniz. Bu durumda, bildirimi dikkatlice okuyup İ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 ü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 Marketplace'ten yükledikten sonra, yerleşik işlevler kadar kolay kullanılır:
- İşlevi kullanmak istediğiniz hücreyi tıklayın.
- Eşittir işaretini (
=
), ardından işlev adını ve herhangi bir giriş değerini (ör.=DOUBLE(A1)
) yazıp Enter'a basın. - Hücre kısa bir süre
Loading...
gösterir, ardından sonucu döndürür.
Özel işlevlerle ilgili yönergeler
Kendi özel işlevinizi yazmadan önce bilmeniz gereken birkaç kural vardır.
Adlandırma
JavaScript işlevlerini adlandırmayla ilgili standart kurallara ek olarak aşağıdakileri de göz önünde bulundurun:
- Özel işlevlerin adı,
SUM()
gibi yerleşik işlevlerin adlarından farklı olmalıdır. - Özel işlevlerin adı, Apps Komut Dosyası'nda özel işlevi ifade eden alt çizgi (
_
) ile bitemez. - Özel işlevlerin adı
var myFunction = new Function()
değilfunction myFunction()
söz diziyle tanımlanmalıdır. - Elektronik 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ğerleri olarak bağımsız değişkenler 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 referans vererek çağırırsanız (
=DOUBLE(A1:B10)
gibi) bağımsız değişken, hücre değerlerinin iki boyutlu bir dizisi olur. Örneğin, aşağıdaki ekran görüntüsünde=DOUBLE(A1:B2)
içindeki bağımsız değişkenler Apps Komut Dosyası tarafındandouble([[1,3],[2,4]])
olarak yorumlanır.DOUBLE
Yukarıdaki örnek kodun, giriş olarak bir dizi kabul edecek şekilde değiştirilmesi gerektiğini unutmayın.Özel işlev bağımsız değişkenleri deterministik olmalıdır. Yani, her hesaplamalarında farklı bir sonuç döndüren yerleşik e-tablo işlevlerine (ör.
NOW()
veyaRAND()
) özel işlev bağımsız değişkenleri olarak izin verilmez. Bir özel işlev, bu değişken yerleşik işlevlerden birine göre bir değer döndürmeye çalışırsa süresiz olarakLoading...
gösterilir.
Döndürülen değerler
Her özel işlev, görüntülenecek bir değer döndürmelidir. Örneğin:
- Özel bir işlev bir değer döndürürse değer, işlevin çağrıldığı hücrede gösterilir.
- Bir özel işlev iki boyutlu bir değer dizisi döndürürse değerler, boş oldukları sürece bitişik hücrelere taşacaktır. Bu işlem, dizinin mevcut hücre içeriklerinin üzerine yazmasına neden olursa özel işlev bunun yerine hata verir. Örnek için, özel işlevleri optimize etme bölümüne bakın.
- Özel işlevler, değer döndürdükleri hücreler dışındaki hücreleri etkileyemez. Diğer bir deyişle, özel işlevler rastgele hücreleri düzenleyemez. Yalnızca çağrıldıkları hücreleri ve bitişik hücreleri düzenleyebilirler. Rastgele hücreleri düzenlemek için bunun yerine işlev çalıştırmak üzere özel menü kullanın.
- Özel işlev çağrısı 30 saniye içinde döndürülmelidir. Aksi takdirde hücrede
#ERROR!
gösterilir ve hücre notuExceeded maximum execution time (line 0).
olur.
Veri türleri
Google E-Tablolar, verilerin türüne bağlı olarak verileri farklı biçimlerde saklar. Bu değerler özel işlevlerde kullanıldığında, Apps Komut Dosyası bunları JavaScript'teki uygun veri türü olarak değerlendirir. En sık karıştırılan konular şunlardır:
- E-Tablolar'daki saatler ve tarihler, Apps Komut Dosyası'nda Date nesneleri olur. E-tablo ve komut dosyası farklı saat dilimleri kullanıyorsa (nadir görülen bir sorundur) özel işlevin bu farkı 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ılara dönüştürülür. Örneğin,
10%
değerine sahip bir hücre Apps Komut Dosyası'nda0.1
olur.
Otomatik tamamlama
Google E-Tablolar, yerleşik işlevler için olduğu gibi özel işlevlerde de otomatik tamamlamayı destekler. Bir hücreye işlev adı yazarken, girdiğinizle eşleşen yerleşik ve özel işlevlerin listesini görürsünüz.
Komut dosyalarında JsDoc
@customfunction
etiketi bulunan özel işlevler bu listede gösterilir (aşağıdaki DOUBLE()
örneğinde gösterildiği gibi).
/**
* 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, bir özel işlev, İngilizce bir ifadeyi İspanyolcaya çevirmek için Language hizmetini çağırabilir.
Diğer Apps Komut Dosyası türlerinin çoğundan farklı olarak özel işlevler hiçbir zaman kullanıcılardan kişisel verilere erişimi yetkilendirmelerini istemez. Bu nedenle, yalnızca kişisel verilere erişimi olmayan hizmetleri, özellikle aşağıdakileri çağırabilirler:
Desteklenen hizmetler | Notlar |
---|---|
Önbellek | Çalışır ancak özel işlevlerde özellikle yararlı değildir. |
HTML | HTML oluşturabilir ancak görüntüleyemez (nadiren kullanışlıdır) |
JDBC | |
Dil | |
Kilitle | Çalışır ancak özel işlevlerde özellikle yararlı değildir. |
Maps | 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 işlevlerde kullanıcı özelliklerini ayarlayamaz. |
E-tablo | Salt okunur (çoğu get*() yöntemini kullanabilir ancak set*() yöntemini kullanamaz).Diğer e-tabloları ( SpreadsheetApp.openById()
veya SpreadsheetApp.openByUrl() ) açamazsınız. |
URL Getirme | |
Yardımcı programlar | |
XML |
Özel işleviniz You do not have permission to
call X service.
hata mesajı gösteriyorsa hizmet kullanıcı yetkilendirmesi gerektiriyor demektir ve bu nedenle özel işlevde kullanılamaz.
Yukarıda listelenenler dışında bir hizmeti kullanmak için özel işlev yazmak yerine Apps Komut Dosyası işlevi çalıştıran bir özel menü oluşturun. Bir menüden tetiklenen işlev, gerekirse kullanıcıdan yetkilendirme ister ve ardından tüm Apps Script hizmetlerini kullanabilir.
Paylaşım
Özel işlevler, oluşturuldukları e-tabloya bağlı olarak başlar. Bu, aşağıdaki yöntemlerden birini kullanmadığınız sürece bir e-tabloda yazılmış ö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 orijinal e-tablodaki komut dosyası metnini 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. Bir e-tablo kopyalandığında, 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şimi olan ortak çalışanlar, orijinal e-tabloda komut dosyası düzenleyiciyi açamaz. Ancak kopya oluşturduklarında kopyanın sahibi olurlar ve komut dosyasını görebilirler.)
- Komut dosyasını Google E-Tablolar Düzenleyici eklentisi olarak yayınlayın.
Optimizasyon
Bir e-tabloda özel işlev her kullanıldığında, Google E-Tablolar Apps Komut Dosyası sunucusuna ayrı bir çağrıda bulunur. E-tablonuz düzinelerce (veya yüzlerce, binlerce!) özel işlev çağrısı içeriyorsa bu işlem oldukça yavaş olabilir.
Bu nedenle, özel bir işlevi büyük bir veri aralığında birden çok kez kullanmayı planlıyorsanız işlevi, iki boyutlu dizi biçiminde bir aralığı giriş olarak kabul edecek 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 edecek şekilde 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
işlevini yinelemeli olarak çağırmak için JavaScript'in Array
nesnesinin map yöntemini kullanır. Sonuçları içeren iki boyutlu bir dizi döndürür. Bu şekilde, DOUBLE
işlevini yalnızca bir kez çağırabilirsiniz ancak işlevin aynı anda çok sayıda hücre için hesaplama yapmasını sağlayabilirsiniz (aşağıdaki ekran görüntüsünde gösterildiği gibi). (Aynı işlemi map
çağrısı yerine iç içe yerleştirilmiş if
ifadeleriyle de yapabilirsiniz.)
Benzer şekilde, aşağıdaki özel işlev internetten canlı içerikleri verimli bir şekilde getirir ve yalnızca tek bir işlev çağrısıyla iki sütunluk sonuç göstermek için iki boyutlu bir dizi kullanır. Her hücrenin kendi işlev çağrısını gerektirmesi durumunda, Apps Script sunucusunun her seferinde XML feed'ini indirip ayrıştırması gerektiğinden işlem çok daha uzun sürer.
/**
* 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 hemen hemen her özel işleve uygulanabilir. Ancak uygulama ayrıntıları, işlevin davranışına bağlı olarak değişir.