Google E-Tablolar'daki Özel İşlevler

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:

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

  1. Google E-Tablolar'da bir e-tablo oluşturun veya açın.
  2. Üst tarafta 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 özel işlev eklentisini bulursanız yüklemek için Yükle'yi tıklayın.
  6. Bir iletişim kutusu, eklentinin yetkilendirme gerektirdiğini belirtebilir. Öyleyse bildirimi dikkatlice okuyun ve İ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 bu işlevin kullanımı yerleşik bir işlev kadar 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 giriş değerini (örneğin, =DOUBLE(A1)) yazın ve Enter tuşuna basın.
  3. 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ğil function 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ından double([[1,3],[2,4]]) olarak yorumlanmıştır. Yukarıdaki DOUBLE ö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() veya RAND()) ö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ışırsa Loading... 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ı'nda 0.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.