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:
- Oluştur veya Google E-Tablolar'da bir e-tablo açın.
- Uzantılar > menü öğesini seçin. Apps Komut Dosyası.
- Komut dosyası düzenleyicideki kodları silin. Yukarıdaki
DOUBLE
işlevi için kodu kopyalayıp komut dosyası düzenleyiciye yapıştırın. - Ü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:
- Oluştur veya Google E-Tablolar'da bir e-tablo açın.
- En üstte Eklentiler > Eklenti al'ı tıklayın.
- Google Workspace Marketplace açıldığında sağ üst köşedeki arama kutusunu tıklayın.
- "Özel işlev" yazın ve Enter tuşuna basın.
- İlgilendiğiniz bir özel işlev eklentisi bulursanız Yükle'yi tıklayın .
- Bir iletişim kutusu, eklentinin yetkilendirme gerektirdiğini gösterebilir. Öyleyse, bildirimi dikkatlice okuyun, ardından İzin ver'i tıklayın.
- 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:
- İşlevi kullanmak istediğiniz hücreyi tıklayın.
- 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. - 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ındandouble([[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()
veyaRAND()
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ülenirseLoading...
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ı'nda0.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. Şunu döndürür:
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.