Google E-Tablolar'daki Özel İşlevler

Google E-Tablolar'da AVERAGE, SUM ve VLOOKUP gibi yüzlerce yerleşik işlev bulunur. Bu işlevler ihtiyaçlarınızı karşılamadığında Google Apps Komut Dosyası'nı kullanarak özel işlevler yazabilirsiniz. Örneğin, metreleri mile dönüştürmek veya İnternet'ten canlı içerik getirmek için özel işlevler yazabilir, ardından bunları Google E-Tablolar'da yerleşik işlevler gibi kullanabilirsiniz.

Başlarken

Özel işlevler, standart JavaScript kullanılarak oluşturulur. JavaScript'e yeni başladıysanız Codecademy'nin yeni başlayanlar için harika 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 yazmayı bilmiyorsanız ve öğrenmeye zamanınız yoksa eklenti mağazasına göz atarak ihtiyacınız olan özel işlevin başka biri tarafından oluşturulup oluşturulmadığını kontrol edin.

Özel işlev oluşturma

Özel 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.

adresinden özel işlev alma

, 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. 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. İlginizi çeken bir özel işlev eklentisi bulursanız Yükle'yi tıklayarak yükleyin.
  6. Bir iletişim kutusunda, eklentinin yetkilendirme gerektirdiği belirtilebilir. Bu durumda, 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 üst tarafta Eklentiler > Eklentileri yönet'i tıklayın. Kullanmak istediğiniz eklentiyi bulup Seçenekler > Bu dokümanda kullan'ı tıklayın.

Özel işlev kullanma

Özel bir işlev yazdıktan veya'dan bir işlev yükledikten sonra, bu işlevleri yerleşik işlevler gibi kolayca kullanabilirsiniz:

  1. İşlevi kullanmak istediğiniz hücreyi tıklayın.
  2. Eşittir işareti (=), ardından işlev adı ve herhangi bir giriş değeri (ör. =DOUBLE(A1)) yazıp Enter tuşuna basın.
  3. Hücrede kısa süreliğine Loading... gösterilir ve ardından sonuç döndürülür.

Özel işlevlerle ilgili yönergeler

Kendi özel işlevinizi yazmadan önce bilmeniz gereken birkaç yönerge vardır.

Adlandırma

JavaScript işlevlerini adlandırma ile 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şlevlerin adı, Apps Komut Dosyası'nda özel işlevi belirten bir alt çizgiyle (_) bitmemelidir.
  • Özel işlevin adı var myFunction = new Function() değil, function myFunction() söz dizimiyle bildirilmelidir.
  • E-tablo işlevlerinin adları geleneksel olarak büyük harfle yazılsa da büyük/küçük harf kullanımı önemli değildir.

Bağımsız değişkenler

Özel işlevler, yerleşik işlevler gibi giriş değeri olarak bağımsız değişkenler alabilir:

  • İşlevinizi tek bir hücreye referansla bağımsız değişken olarak çağırırsanız (ör. =DOUBLE(A1)), bağımsız değişken hücrenin değeri olur.
  • İşlevinizi bir hücre aralığına referansla bağımsız değişken olarak çağırırsanız (ör. =DOUBLE(A1:B10)), 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ından double([[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 belirleyici olmalıdır. Yani, her hesaplamada farklı bir sonuç döndüren yerleşik e-tablo işlevlerinin (ör. NOW() veya RAND()) özel işlevlerde bağımsız değişken olarak kullanılmasına izin verilmez. Özel bir işlev, bu değişken yerleşik işlevlerden birine göre değer döndürmeye çalışırsa Loading... sonsuza kadar gösterilir.

Döndürülen değerler

Her özel işlev, görüntülenecek bir değer döndürmelidir. Bu değer şu şekilde olmalıdır:

  • Özel bir işlev değer döndürürse bu değer, işlevin çağrıldığı hücrede gösterilir.
  • Özel bir işlev değerlerden oluşan iki boyutlu bir dizi döndürürse değerler, boş oldukları sürece bitişik 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ücreler dışında hücreleri etkileyemez. Başka bir deyişle, özel işlevler rastgele hücreleri değil, yalnızca çağrıldıkları hücreleri ve bu hücrelere bitişik olan hücreleri düzenleyebilir. İstediğiniz 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 döndürülmelidir. Aksi takdirde hücrede #ERROR!, hücre notunda ise Exceeded maximum execution time (line 0). gösterilir.

Veri türleri

Google E-Tablolar, verilerin niteliğine bağlı olarak verileri farklı biçimlerde depolar. Bu değerler özel işlevlerde kullanıldığında Apps Script, 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 nesnelerine dönüşür. E-tablo ve komut dosyası farklı saat dilimlerini kullanıyorsa (nadir görülen bir sorun) özel işlevin bunu telafi etmesi gerekir.
  • E-Tablolar'daki süre değerleri de Date nesneleri haline gelir ancak bunlarla çalışmak karmaşık olabilir.
  • E-Tablolar'daki yüzde değerleri, Apps Komut Dosyası'nda ondalık sayıya 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şlevlerde de otomatik tamamlama özelliğini 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 aşağıdaki DOUBLE() örneğinde olduğu gibi bir JsDoc @customfunction etiketi varsa özel işlevler 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 Language hizmetini çağırabilir.

Diğer Apps Komut Dosyası türlerinin çoğundan farklı olarak, özel işlevler kullanıcılardan kişisel verilere erişimi yetkilendirmelerini asla istemez. Bu nedenle, yalnızca kişisel verilere erişimi olmayan hizmetleri (özellikle aşağıdakileri) arayabilirler:

Desteklenen hizmetler Notlar
Önbellek Çalışır ancak özel işlevlerde pek kullanışlı 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 pek kullanışlı değildir.
Haritalar Yol tarifi hesaplayabilir ancak harita görüntüleyemez
Mülkler getUserProperties() yalnızca e-tablo sahibinin özelliklerini alır. E-tablo düzenleyicileri, özel bir işlevde kullanıcı özellikleri ayarlayamaz.
E-tablo Salt okuma (get*() yöntemlerinin çoğu kullanılabilir ancak set*() kullanılamaz).
Diğer e-tablolar açılamaz (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ı veriyorsa hizmet için kullanıcı yetkilendirmesi gerekir ve bu nedenle özel işlevde kullanılamaz.

Yukarıda listelenenler dışındaki bir hizmeti kullanmak için özel işlev yazmak yerine bir Apps Komut Dosyası işlevini çalıştıran bir özel menü oluşturun. Bir menüden tetiklenen işlev, gerekirse kullanıcıdan yetkilendirme ister ve sonuç olarak tüm Apps Komut Dosyası hizmetlerini kullanabilir.

Paylaşım

Özel işlevler, oluşturuldukları e-tabloya bağlı olarak başlar. Bu, bir e-tabloda yazılan özel 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üzenleyicisini 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. Bir e-tablo kopyalandığında, ekli 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 kopyasını 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

Özel işlevler bir e-tabloda her kullanıldığında Google E-Tablolar, Apps Komut Dosyası sunucusuna ayrı bir çağrı yapar. E-tablonuzda düzinelerce (hatta yüzlerce veya binlerce!) özel işlev çağrısı varsa bu işlem oldukça yavaş olabilir. Çok sayıda veya karmaşık özel işlev içeren bazı projelerde yürütme işlemi geçici olarak gecikebilir.

Dolayısıyla, özel bir işlevi geniş bir veri aralığında birden çok kez kullanmayı planlıyorsanız işlevi, iki boyutlu bir dizi biçiminde giriş olarak bir aralık 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şımda, her satırı almak için JavaScript'in Array nesnesinin map yöntemi kullanılarak hücrelerin iki boyutlu dizisi üzerinde işlem yapılır. Ardından, her satır için map tekrar kullanılarak her hücrenin değeri iki katına çıkarı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 işlevini yalnızca bir kez çağırabilir ancak aynı anda çok sayıda hücre için hesaplama yapabilirsiniz. (Aynı şeyi map çağrısı yerine iç içe yerleştirilmiş if ifadeleriyle de yapabilirsiniz.)

Benzer şekilde, aşağıdaki özel işlev de internetten canlı içerikleri verimli bir şekilde getirir ve yalnızca tek bir işlev çağrısıyla iki sonuç sütunu görüntülemek için iki boyutlu bir dizi kullanır. Her hücrenin kendi işlev çağrısını yapması gerekseydi Apps Komut Dosyası sunucusunun XML feed'ini her seferinde indirmesi ve 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-tabloda tekrar tekrar kullanılan neredeyse tüm özel işlevlere uygulanabilir. Ancak uygulama ayrıntıları, işlevin davranışına bağlı olarak değişir.