Google E-Tablolar'daki Özel İşlevler

Google E-Tablolar’da yüzlerce yerleşik işlevler AVERAGE, SUM ve VLOOKUP. Bu sorular bir komut dosyası kullanıyorsanız, Google Apps Komut Dosyası'nı kullanarak özel — örneğin, sayaçları millere dönüştürmek veya getirmek için sonra bunlara göz atın ve bunları kullanın yerleşik bir işlev gibidir.

Başlarken

Özel işlevler standart JavaScript kullanılarak oluşturulur. Bu konuda yeniyseniz Codecademy, JavaScript'in temellerini harika bir kurstur. (Not: Bu kurs Google tarafından geliştirilmemiştir ve Google ile ilişkili değildir.)

Burada, DOUBLE adlı basit bir özel işlev görünür. Bu işlev, giriş değerini 2 katına çıkarır:

/**
 * 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 öğrenmek için zamanınız yoksa eklenti mağazasını kontrol edin ihtiyacınız olan özel işlevin başka biri tarafından oluşturulup oluşturulmadığını kontrol edebilirsiniz.

Özel işlev oluşturma

Özel bir işlev yazmak için:

  1. Oluştur veya Google E-Tablolar'da bir e-tablo açın.
  2. Uzantılar > menü öğesini seçin. Apps Komut Dosyası.
  3. Komut dosyası düzenleyicideki kodları silin. Yukarıdaki DOUBLE işlevi için kodu kopyalayıp komut dosyası düzenleyiciye yapıştırın.
  4. Üstte Kaydet'i tıklayın.

Artık özel işlevi kullanabilirsiniz.

Google Workspace Marketplaceiçinden özel bir işlev alma

Google Workspace Marketplace , çeşitli özel şu şekilde çalışır: Google E-Tablolar eklentilerini inceleyebilirsiniz. Bu eklentileri kullanmak veya keşfetmek için:

  1. Oluştur veya Google E-Tablolar'da bir e-tablo açın.
  2. En üstte Eklentiler > Eklenti al'ı tıklayın.
  3. Google Workspace Marketplace açıldığında sağ üst köşedeki arama kutusunu tıklayın.
  4. "Özel işlev" yazın ve Enter tuşuna basın.
  5. İlgilendiğiniz bir özel işlev eklentisi bulursanız Yükle'yi tıklayın .
  6. Bir iletişim kutusu, eklentinin yetkilendirme gerektirdiğini belirtebilir. Öyleyse, bildirimi dikkatlice okuyun, ardından İzin ver'i tıklayın.
  7. Eklenti e-tabloda kullanılabilir hale gelir. Eklentiyi farklı bir e-tablo açın, diğer e-tabloyu açın ve en üstte eklentiler > Eklentileri yönet'i tıklayın. Kullanmak istediğiniz eklentiyi bulun ve tıklayın Seçenekler > Burada kullan doküman ekleyin.

Özel işlev kullanma

Özel bir fonksiyon yazdıktan veya Google Workspace Marketplace, kullanımı kolay bir yerleşik işlev:

  1. İşlevi kullanmak istediğiniz hücreyi tıklayın.
  2. Eşittir işaretini (=), ardından işlev adını ve herhangi bir giriş değerini yazın. (örneğin, =DOUBLE(A1)) ve Enter tuşuna basın.
  3. Hücrede kısa bir süre Loading... görüntülenecek ve sonuç döndürülecektir.

Özel işlevlerle ilgili yönergeler

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

Adlandırma

JavaScript fonksiyonlarını adlandırma standart kurallarına ek olarak şunlara dikkat edin:

  • Özel bir işlevin adı, yerleşik işlevler SUM().
  • Özel bir işlevin adı, alt çizgiyle (_) bitemez. Bu işlem, Apps Komut Dosyası'nda özel bir işlevi belirtir.
  • Özel işlevin adı söz dizimiyle tanımlanmalıdır function myFunction(), var myFunction = new Function() değil.
  • Elektronik tablo işlevlerinin adları olsa da büyük harf kullanımı fark etmez büyük harfle yazılır.

Bağımsız değişkenler

Yerleşik işlevler gibi özel bir işlev de bağımsız değişkenleri giriş değeri olarak alabilir:

  • İşlevinizi, bağımsız değişken olarak tek bir hücreye başvuruyla birlikte çağırırsanız (=DOUBLE(A1) gibi) bağımsız değişken, hücrenin değeri olur.
  • İşlevinizi, bir hücre aralığına referans vererek bağımsız değişkenle (=DOUBLE(A1:B10) gibi) başlarsa bağımsız değişken iki boyutlu hücre dizisi' değerler. Ö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]]). DOUBLE için örnek kodun Yukarıda bir değer olmalıdır bir diziyi giriş olarak kabul edecek şekilde değiştirildi.


  • Özel işlev bağımsız değişkenleri deterministik O her defasında farklı bir sonuç döndüren yerleşik e-tablo işlevleridir. hesapladıkları (NOW() veya RAND() gibi) bağımsız değişken olarak izin verilmez. işlevine dönüştürülebilir. Özel bir işlev bu değişken yerleşik işlevlerden birinde görüntülenirse Loading... koruyabilmelidir.

Döndürülen değerler

Her özel işlev, görüntülenecek bir değer döndürmelidir. Örneğin:

  • Özel işlev bir değer döndürürse değer, hücrede görüntülenir fonksiyondan çağrıldı.
  • Özel bir işlev iki boyutlu bir değer dizisi döndürürse satır öğeleri boş olduğu sürece bitişik hücrelere taşar. Eğer dizi mevcut hücre içeriklerinin üzerine yazmasına neden olursa özel fonksiyon hata gönderebilirsiniz. Örnek için özel işlevleri optimize etme hakkında daha fazla bilgi edinin.
  • Özel işlevler, değer döndürdükleri dışındaki hücreleri etkileyemez. Başka bir deyişle, özel bir işlev rastgele hücreleri düzenleyemez; yalnızca ve bitişik hücrelere dahil edilir. Rastgele hücreleri düzenlemek için: bunun yerine bir işlev çalıştırmak için özel menü kullanın.
  • Özel işlev çağrısı 30 saniye içinde döndürülmelidir. Aksi halde hücrede hata gösterilir: Internal error executing the custom function.

Veri türleri

Google E-Tablolar verileri şurada depolar: farklı biçimler verinin doğası gereğidir. Bu değerler özel işlevlerde kullanıldığında, Google Apps Komut dosyası bunları JavaScript'te uygun veri türüne sahip olmalısınız. En çok kafa karışıklığı yaşanan alanlar şunlardır:

  • E-Tablolar'daki saatler ve tarihler Apps Komut Dosyası'ndaki Date nesneleri. E-tablo ve komut dosyası farklı saat dilimleri kullanıyorsa (nadir bir sorun) özel işlev, gerek vardır.
  • E-Tablolar'daki süre değerleri de Date nesne haline gelir ancak onlarla çalışmak karmaşık bir iş olabilir.
  • E-Tablolar'daki yüzde değerleri, Apps Komut Dosyası'nda ondalık sayılara dönüşür. Örneğin, Örneğin, 10% değerine sahip bir hücre Apps Komut Dosyası'nda 0.1 haline gelir.

Otomatik tamamlama

Google E-Tablolar, yerleşik işlevler. Siz bir hücreye fonksiyon adı yazdığınızda yerleşik ve özel işlevleri de kullanabilirsiniz.

Komut dosyalarında özel fonksiyonlar bir JsDoc @customfunction etiketi, aşağıdaki DOUBLE() örneğindeki gibidir.

/**
 * 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 Google Apps Komut Dosyası hizmetleri ile daha karmaşık işlemler gerçekleştirin görevlerden biridir. Örneğin, bir özel işlev İngilizce çeviri yapmak için Dil hizmeti İspanyolcaya çevirebilir.

Diğer çoğu Apps Komut Dosyası türünün aksine, özel işlevler kullanıcılardan kişisel verilere erişim yetkisi verebilirsiniz. Dolayısıyla, yalnızca hizmetleri Özellikle aşağıdakiler gibi kişisel verilere erişimi olmayanlar:

Desteklenen hizmetler Notlar
Önbellek Çalışır ancak özel işlevlerde pek faydalı değildir
HTML HTML oluşturabilir, ancak görüntüleyemez (nadiren faydalıdır)
JDBC
Dil
Kilitle Çalışır ancak özel işlevlerde pek faydalı değildir
Maps Yol tariflerini hesaplayabilir, ancak haritaları görüntüleyemez
Mülkler getUserProperties(), yalnızca e-tablo sahibidir. E-tablo düzenleyicileri, özel işlev'e dokunun.
E-tablo Salt okunur (çoğu get*() yöntemi kullanılabilir, ancak set*() yöntemi kullanılamaz).
Diğer e-tablolar (SpreadsheetApp.openById()) açılamıyor 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 ve dolayısıyla kullanılan fonksiyondur.

Yukarıda listelenenler dışında bir hizmet kullanmak için Apps Komut Dosyası işlevini çalıştıran özel menü kullanabilirsiniz. Menüden tetiklenen bir işlev gerekirse kullanıcıdan yetkilendirme ister ve sonuç olarak Apps Komut Dosyası hizmetleri.

Paylaşım

Özel işlevler bağla bir e-tablo ile otomatik olarak oluşturulur. Bu, bir e-tablonun diğer e-tablolarda kullanılamaz aşağıdaki yöntemleri kullanabilirsiniz:

  • Aşağıdaki işlemleri yapmak için Uzantılar > Apps Komut Dosyası'nı tıklayın. komut dosyası düzenleyicisini açın, ardından komut dosyası metnini orijinal e-tablodan alıp komut dosyası düzenleyiciye yapıştırın farklı bir e-tablo kullanır.
  • Özel işlevi içeren e-tablonun bir kopyasını oluşturmak için Dosya > Kopyasını oluştur'u tıklayın. Bir e-tablo kopyalandığında, onlar da kopyalanır. E-tabloya erişimi olan herkes komut dosyası. (Salt görüntüleme erişimi olan ortak çalışanlar komut dosyası düzenleyiciyi açamaz orijinal e-tablosunda değiştirin. Ancak, bir kopya oluşturduklarında, kopyanın sahibi ve komut dosyasını görebilir.)
  • Komut dosyasını Google E-Tablolar Düzenleyici Eklentisi olarak yayınlayın.

Optimizasyon

Özel işlev bir e-tabloda her kullanıldığında, Google E-Tablolar farklı bir çağrı göndermeniz gerekir. E-tablonuzda onlarca (veya yüzlerce, hatta binlerce!) özel işlev çağrısı içeriyorsa bu işlem oldukça yavaşlar.

Sonuç olarak, özel bir işlevi geniş bir bir aralığı varsayarsak, bu fonksiyonu değiştirerek bir aralığı iki boyutlu dizi biçiminde girdi, daha sonra iki boyutlu bir dizi olabilir.

Örneğin, yukarıda gösterilen DOUBLE() işlevi bir aşağıdaki gibi tek hücre veya hücre aralığı:

/**
 * 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 JavaScript'in Array nesnesinin map yöntemini yinelemeli olarak iki boyutlu hücre dizisindeki her değer için DOUBLE yöntemini çağırın. Bir iki boyutlu diziyi temsil eder. Bu şekilde, DOUBLE numaralı telefonu arayabilirsiniz ancak buradaki gibi, aynı anda çok sayıda hücre için hesaplama yapmasını sağlar aşağıdaki ekran görüntüsüne bakın. (Aynı şeyi iç içe yerleştirilmiş if ile de yapabilirsiniz, ifadeleri yerine map çağrısını kullanmanız gerekir.)

Benzer şekilde, aşağıdaki özel işlev ve iki boyutlu bir dizi kullanarak iki sonuç sütununu görüntüler ve tek bir işlev çağrısında bulunabilir. Her hücre kendi işlev çağrısına ihtiyaç duyuyorsa işlemi önemli ölçüde daha fazla zaman alacaktır çünkü Apps Komut Dosyası sunucusu her defasında XML feed'ini indirip ayrıştırması gerekir.

/**
 * 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 kullanılan neredeyse tüm özel işlevlere sürekli tekrar eder. Ancak uygulama ayrıntıları, fonksiyonun davranışına göre değişir.