Google E-Tablolar; AVERAGE
, SUM
ve VLOOKUP
gibi yüzlerce yerleşik işlev sunar. Bunlar ihtiyaçlarınız için yeterli olmadığında Google Apps Komut Dosyası'nı kullanarak özel işlevler yazabilirsiniz (örneğin, metreleri mil değerine dönüştürmek veya internetten canlı içerik getirmek) ve 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 yeni kullanmaya başladıysanız Codecademy, yeni başlayanlar için mükemmel bir kurs sunuyor. (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şlevi burada görebilirsiniz:
/**
* 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ına göz atın.
Ö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.
Şuradan özel işlev alma: Google Workspace Marketplace
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.
- Üst tarafta 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 özel işlev eklentisini bulursanız yüklemek için Yükle'yi tıklayın.
- Bir iletişim kutusu, eklentinin yetkilendirme gerektirdiğini belirtebilir. Öyleyse bildirimi dikkatlice okuyun ve İ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 bu işlevin kullanımı yerleşik bir işlev kadar kolaydır:
- İşlevi kullanmak istediğiniz hücreyi tıklayın.
- Eşittir işareti (
=
) ve ardından işlev adını ve giriş değerini (örneğin,=DOUBLE(A1)
) yazın ve Enter tuşuna basın. - Hücrede kısa bir süre için
Loading...
görüntülenir ve ardından sonuç döndürülür.
Özel işlevlerle ilgili kurallar
Kendi özel işlevinizi yazmadan önce bilmeniz gereken birkaç yönerge var.
Adlandırma
JavaScript işlevlerini adlandırmayla ilgili standart kurallara ek olarak, aşağıdakilere de dikkat edin:
- Özel işlevin adı,
SUM()
gibi yerleşik işlevlerin adlarından farklı olmalıdır. - Özel işlevin adı alt çizgiyle (
_
) bitemez. Bu, Apps Komut Dosyası'ndaki gizli bir işlevi ifade eder. - Özel işlevin adı
var myFunction = new Function()
değilfunction myFunction()
söz dizimiyle belirtilmelidir. - E-tablo işlevlerinin adları geleneksel olarak büyük harfle yazılmış olsa da büyük harf kullanımı fark etmez.
Bağımsız değişkenler
Yerleşik işlevlerde olduğu gibi, özel işlevler de girdi değerleri olarak bağımsız değişkenler alabilir:
- İşlevinizi tek bir hücreye referansla bağımsız değişken olarak (
=DOUBLE(A1)
gibi) çağırırsanız bağımsız değişken, hücrenin değeri olur. Fonksiyonunuzu bağımsız değişken olarak bir hücre aralığına referans vererek (
=DOUBLE(A1:B10)
gibi) çağırırsanız 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)
dilindeki bağımsız değişkenler Apps Komut Dosyası tarafındandouble([[1,3],[2,4]])
olarak yorumlanmıştır. YukarıdakiDOUBLE
örnek kodunun bir diziyi girdi olarak kabul edecek şekilde değiştirilmesi gerektiğini unutmayın.Özel işlev bağımsız değişkenleri belirleyici olmalıdır. Yani, her hesaplamada farklı bir sonuç döndüren yerleşik e-tablo işlevlerinin (ör.
NOW()
veyaRAND()
) özel bir işlevin bağımsız değişkeni olarak kullanılmasına izin verilmez. Bir özel işlev, bu değişken yerleşik işlevlerden birine dayalı bir değer döndürmeye çalışırsaLoading...
değerini süresiz olarak gösterir.
Döndürülen değerler
Her özel işlev, gösterilecek bir değer döndürmelidir. Örneğin:
- Özel işlev bir değer döndürürse bu değer, işlevin çağrıldığı hücrede görüntülenir.
- Bir özel işlev iki boyutlu bir değer dizisi döndürürse değerler, bu hücreler boş olduğu sürece komşu hücrelere taşar. Bu durum, 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üğü hücrelerin dışındaki hücreleri etkileyemez. Diğer bir deyişle, özel bir işlev rastgele hücreleri düzenleyemez. Yalnızca çağrıldığı hücreleri ve bitişik hücreleri düzenleyebilir. Rastgele hücreleri düzenlemek için işlev çalıştırmak üzere özel menü kullanın.
- Özel işlev çağrısı 30 saniye içinde geri dönmelidir. Aksi takdirde hücrede bir hata gösterilir:
Internal error executing the custom function.
Veri türleri
Google E-Tablolar, verileri niteliklerine bağlı olarak farklı biçimlerde depolar. Bu değerler özel işlevlerde kullanıldığında, Apps Komut Dosyası bunları JavaScript'te uygun veri türü olarak değerlendirir. En yaygın karışıklık 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 (ender bir sorun) özel işlevin bunu telafi etmesi gerekir.
- E-Tablolar'daki süre değerleri de
Date
nesneleri haline gelir ancak bu öğelerle çalışmak karmaşık olabilir. - E-Tablolar'daki yüzde değerleri, Apps Komut Dosyası'nda ondalık sayılara dönüşür. Örneğin,
10%
değerine sahip bir hücre Apps Komut Dosyası'nda0.1
olur.
Otomatik tamamlama
Google E-Tablolar, yerleşik işlevlerde olduğu gibi özel işlevler için otomatik tamamlama özelliğini destekler. Bir hücreye işlev adı yazarken, girdiğinizle eşleşen yerleşik ve özel işlevlerin bir listesini görürsünüz.
Özel işlevler, aşağıdaki DOUBLE()
örneğinde olduğu gibi komut dosyaları 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 bir işlev, İngilizce bir ifadeyi İspanyolcaya çevirmek için Dil hizmetini çağırabilir.
Diğer Apps Komut Dosyası türlerinin aksine özel işlevler, hiçbir zaman kullanıcılardan kişisel verilere erişim yetkisi vermesini istemez. Bunun sonucunda, yalnızca kişisel verilere erişimi olmayan hizmetleri, özellikle de aşağıdakileri arayabilirler:
Desteklenen hizmetler | Notlar |
---|---|
Önbellek | Çalışır, ancak özel işlevlerde özellikle faydalı değildir |
HTML | HTML oluşturulabilir ancak görüntülenemez (nadiren faydalıdır) |
JDBC | |
Dil | |
Kilitle | Çalışır, ancak özel işlevlerde özellikle faydalı değildir |
Haritalar | Yol tarifi hesaplanabilir ama haritalar gösterilemez |
Mülkler | getUserProperties() , yalnızca e-tablo sahibinin özelliklerini alır. E-tablo düzenleyicileri özel bir işlevde kullanıcı özelliklerini ayarlayamaz. |
E-tablo | Salt okunur (çoğu get*() yöntemini kullanabilir, ancak set*() kullanamaz).Diğer e-tabloları ( SpreadsheetApp.openById() veya SpreadsheetApp.openByUrl() ) açamaz. |
URL Getirme | |
Yardımcı programlar | |
XML |
Özel işleviniz You do not have permission to
call X service.
hata mesajını iletiyorsa hizmet, kullanıcı yetkilendirmesi gerektirdiğinden özel bir işlevde kullanılamaz.
Yukarıda listelenenler dışında bir hizmet kullanmak için özel işlev yazmak yerine bir Apps Komut Dosyası işlevi çalıştıran özel menü oluşturun. Menüden tetiklenen bir işlev, gerekiyorsa kullanıcıdan yetkilendirme ister ve bunun sonucunda tüm Apps Komut Dosyası hizmetlerini kullanabilir.
Paylaşılıyor
Özel işlevler, oluşturuldukları e-tabloya bağlı olarak başlar. Bu, bir e-tabloda yazılan özel bir işlevin, aşağıdaki yöntemlerden birini kullanmadığınız sürece 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üzenleyiciye 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 e-tabloya ekli tüm komut dosyaları da kopyalanır. E-tabloya erişimi olan herkes komut dosyasını kopyalayabilir. (Salt görüntüleme erişimi olan ortak çalışanlar, komut dosyası düzenleyiciyi orijinal e-tabloda açamaz. Ancak bir 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 bir işlev her kullanıldığında, Google E-Tablolar Apps Komut Dosyası sunucusuna ayrı bir çağrı yapar. E-tablonuz onlarca (veya yüzlerce ya da binlerce!) özel işlev çağrısı içeriyorsa bu süreç oldukça yavaş olabilir.
Sonuç olarak, özel bir işlevi geniş bir veri aralığında birden çok kez kullanmayı planlıyorsanız işlevi, bir aralığı girdi olarak iki boyutlu bir dizi şeklinde kabul edecek ve ardından uygun hücrelere taşabilecek iki boyutlu bir dizi döndürecek şekilde değiştirebilirsiniz.
Ö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şımda, iki boyutlu hücre dizisindeki her değerde yinelemeli olarak DOUBLE
çağrısı yapmak için JavaScript'in Array
nesnesinin map yöntemi kullanılır. Sonuçları içeren iki boyutlu bir dizi döndürür. Bu şekilde, aşağıdaki ekran görüntüsünde gösterildiği gibi DOUBLE
yöntemini yalnızca bir kez çağırabilir ve aynı anda çok sayıda hücre için hesaplamasını sağlayabilirsiniz. (Aynı şeyi, 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çeriği etkili bir şekilde getirir ve tek bir işlev çağrısıyla iki boyutlu sonuç sütununu görüntülemek için iki boyutlu bir dizi kullanır. Her hücre kendi işlev çağrısını gerektiriyorsa Apps Komut Dosyası sunucusunun her defasında XML feed'ini indirip ayrıştırması gerekeceğinden işlem çok daha uzun sürerdi.
/**
* 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-tablo boyunca tekrarlanan şekilde kullanılan neredeyse tüm özel işlevlere uygulanabilir, ancak uygulama ayrıntıları işlevin davranışına bağlı olarak değişebilir.