Google E-Tablolar'daki Özel İşlevler

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:

  1. Google E-Tablolar'da bir e-tablo oluşturun veya mevcut bir e-tabloyu açın.
  2. Uzantılar > Apps Komut Dosyası menü öğesini seçin.
  3. 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.
  4. Ü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:

  1. Google E-Tablolar'da bir e-tablo oluşturun veya mevcut bir e-tabloyu açın.
  2. En üstte Eklentiler > Eklenti al'ı tıklayın.
  3. Google Workspace Marketplace açıldıktan sonra sağ üst köşedeki arama kutusunu tıklayın.
  4. "Özel işlev" yazıp Enter tuşuna basın.
  5. İlgilendiğiniz bir özel işlev eklentisi bulursanız Yükle'yi tıklayarak yükleyin.
  6. 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.
  7. 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:

  1. İşlevi kullanmak istediğiniz hücreyi tıklayın.
  2. 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.
  3. 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ından double([[1,3],[2,4]]) olarak yorumlanmıştır. Yukarıdan DOUBLE 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() veya RAND() 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 olarak Loading... 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ı'nda 0.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.