Google Sheets menawarkan
ratusan
fungsi bawaan seperti
AVERAGE
,
SUM
, dan
VLOOKUP
. Jika pertanyaannya tidak sesuai
sesuai kebutuhan, Anda dapat menggunakan Google Apps Script untuk menulis fungsi khusus
— misalnya, untuk mengonversi meter ke mil atau mengambil
konten live dari internet — lalu gunakan
di {i>Google Sheets<i} seperti
fungsi {i>built-in<i}.
Memulai
Fungsi kustom dibuat menggunakan JavaScript standar. Jika Anda baru saja JavaScript, Codecademy menawarkan kursus yang bagus untuk pemula. (Catatan: kursus ini tidak dikembangkan oleh dan tidak terkait dengan Google.)
Berikut adalah fungsi kustom sederhana, bernama DOUBLE
, yang mengalikan nilai
nilai input dengan 2:
/**
* 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;
}
Jika Anda tidak tahu cara menulis JavaScript dan tidak punya waktu untuk belajar, periksa toko add-on untuk melihat apakah orang lain telah membuat fungsi kustom yang Anda butuhkan.
Membuat fungsi kustom
Untuk menulis fungsi kustom:
- Buat atau membuka {i>spreadsheet<i} di Google Sheets.
- Pilih item menu Ekstensi > Apps Script.
- Hapus semua kode di editor skrip. Untuk fungsi
DOUBLE
di atas, cukup salin dan tempel kode ke editor skrip. - Di bagian atas, klik Simpan .
Sekarang Anda dapat menggunakan fungsi kustom.
Mendapatkan fungsi kustom dari Google Workspace Marketplace
Google Workspace Marketplace menawarkan beberapa opsi berfungsi sebagai add-on untuk Google Spreadsheet. Untuk menggunakan atau menjelajahi add-on ini:
- Buat atau membuka {i>spreadsheet<i} di Google Sheets.
- Di bagian atas, klik add-on > Dapatkan add-on.
- Setelah Google Workspace Marketplace terbuka, klik kotak penelusuran di sudut kanan atas.
- Ketik "custom function" (fungsi kustom) lalu tekan Enter.
- Jika Anda menemukan add-on fungsi kustom yang diminati, klik Install untuk menginstalnya.
- Akan muncul kotak dialog yang memberitahukan bahwa add-on memerlukan otorisasi. Jika demikian, baca pemberitahuan dengan cermat, lalu klik Izinkan.
- Add-on akan tersedia di spreadsheet. Untuk menggunakan add-on di {i>spreadsheet<i} yang berbeda, buka {i>spreadsheet <i}lain dan di bagian atas, klik add-on > Kelola add-on. Temukan add-on yang ingin Anda gunakan, lalu klik Opsi > Gunakan di dokumen.
Menggunakan fungsi kustom
Setelah Anda menulis fungsi khusus atau menginstal fungsi dari Google Workspace Marketplace, penggunaannya semudah fungsi bawaan:
- Klik sel tempat Anda ingin menggunakan fungsi.
- Ketik tanda sama dengan (
=
) diikuti dengan nama fungsi dan nilai input apa pun — misalnya,=DOUBLE(A1)
— lalu tekan Enter. - Sel akan menampilkan
Loading...
sesaat, lalu menampilkan hasilnya.
Panduan untuk fungsi kustom
Sebelum menulis fungsi kustom, ada beberapa panduan yang perlu diketahui.
Penamaan
Selain konvensi standar untuk penamaan fungsi JavaScript, perhatikan hal-hal berikut:
- Nama fungsi kustom harus berbeda dari nama fungsi
fungsi bawaan seperti
SUM()
. - Nama fungsi kustom tidak boleh diakhiri dengan garis bawah (
_
), yang menunjukkan fungsi pribadi di Apps Script. - Nama fungsi kustom harus dideklarasikan dengan sintaksis
function myFunction()
, bukanvar myFunction = new Function()
. - Kapitalisasi tidak masalah, meskipun nama-nama {i>function<i} pada {i>spreadsheet<i} biasanya ditulis dengan huruf besar.
Argumen
Seperti fungsi bawaan, fungsi kustom dapat mengambil argumen sebagai nilai input:
- Jika Anda memanggil fungsi dengan referensi ke satu sel sebagai argumen
(seperti
=DOUBLE(A1)
), argumennya akan berupa nilai sel. Jika Anda memanggil {i>function<i} dengan referensi ke rentang sel sebagai (seperti
=DOUBLE(A1:B10)
), argumennya akan berupa dua dimensi himpunan sel masing-masing. Misalnya, dalam screenshot di bawah ini, argumen di=DOUBLE(A1:B2)
ditafsirkan oleh Apps Script sebagaidouble([[1,3],[2,4]])
. Perhatikan bahwa kode contoh untukDOUBLE
dari atas harus diubah untuk menerima array sebagai input.Argumen fungsi kustom harus determenistik. Bahwa adalah, fungsi {i>spreadsheet<i} bawaan yang menampilkan hasil berbeda setiap kali yang dihitung — seperti
NOW()
atauRAND()
— tidak diizinkan sebagai argumen ke suatu fungsi kustom. Jika fungsi kustom mencoba menampilkan nilai berdasarkan salah satu fungsi bawaan yang tidak stabil ini akan menampilkanLoading...
tanpa batas waktu.
Nilai yang ditampilkan
Setiap fungsi kustom harus menampilkan nilai yang akan ditampilkan, sehingga:
- Jika fungsi khusus menampilkan nilai, nilai tersebut akan ditampilkan dalam sel fungsi tersebut dipanggil.
- Jika fungsi kustom menampilkan array nilai dua dimensi, nilainya {i>meluap<i} ke sel yang bersebelahan selama sel tersebut kosong. Jika ini akan menyebabkan {i>array<i} menimpa isi sel yang ada, maka fungsi khusus akan memunculkan pesan {i>error<i}. Sebagai contoh, lihat bagian tentang mengoptimalkan fungsi kustom.
- Fungsi khusus tidak dapat memengaruhi sel selain sel yang menghasilkan nilai. Dengan kata lain, fungsi khusus tidak dapat mengedit sel arbitrer, hanya saja dari sel-sel itu dan sel-sel yang berdekatan. Untuk mengedit sel arbitrer, gunakan menu kustom untuk menjalankan fungsi.
- Panggilan fungsi kustom harus ditampilkan dalam 30 detik. Jika tidak,
sel menampilkan
#ERROR!
dan catatan sel menampilkanExceeded maximum execution time (line 0).
Jenis data
{i>Google Sheets <i}menyimpan data di format yang berbeda tergantung sifat dari data. Saat nilai tersebut digunakan dalam fungsi kustom, Apps Skrip memperlakukan nilai tersebut sebagai jenis data yang sesuai di JavaScript. Berikut adalah hal-hal yang paling membingungkan:
- Waktu dan tanggal di Spreadsheet menjadi Date di Apps Script. Jika {i>spreadsheet<i} dan skrip menggunakan zona waktu yang berbeda (masalah yang jarang terjadi), fungsi khusus akan perlu mengimbangi.
- Nilai durasi di Spreadsheet juga menjadi objek
Date
, tetapi bekerja dengan mereka bisa jadi rumit. - Nilai persentase di Spreadsheet menjadi angka desimal di Apps Script. Sebagai
misalnya, sel dengan nilai
10%
menjadi0.1
di Apps Script.
Pelengkapan Otomatis
Google Sheets mendukung pelengkapan otomatis untuk fungsi khusus seperti pada fungsi bawaan. Saat Anda mengetik nama fungsi dalam sel, Anda akan melihat daftar fungsi bawaan dan {i>custom<i} fungsi yang sesuai dengan yang Anda masukkan.
Fungsi khusus akan muncul dalam daftar ini jika skripnya menyertakan
JsDoc
tag @customfunction
, seperti pada contoh DOUBLE()
di bawah.
/**
* 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;
}
Lanjutan
Menggunakan layanan Google Apps Script
Fungsi khusus dapat memanggil Layanan Google Apps Script untuk melakukan operasi yang lebih kompleks tugas klasifikasi. Misalnya, fungsi kustom dapat memanggil Layanan Bahasa untuk menerjemahkan bahasa Inggris frase yang sama ke dalam bahasa Spanyol.
Tidak seperti kebanyakan jenis Apps Script lainnya, fungsi khusus tidak pernah meminta pengguna untuk mengizinkan akses ke data pribadi. Akibatnya, mereka hanya dapat memanggil layanan yang tidak memiliki akses ke data pribadi, khususnya hal berikut:
Layanan yang didukung | Catatan |
---|---|
Cache | Berhasil, tetapi tidak terlalu berguna dalam fungsi kustom |
HTML | Dapat menghasilkan HTML, tetapi tidak dapat menampilkannya (jarang berguna) |
JDBC | |
Bahasa | |
Kunci | Berhasil, tetapi tidak terlalu berguna dalam fungsi kustom |
Maps | Dapat menghitung rute, tetapi tidak menampilkan peta |
Properti | getUserProperties() hanya mendapatkan properti
pemilik {i>spreadsheet<i}. Editor spreadsheet tidak dapat menetapkan properti pengguna di
fungsi kustom. |
Spreadsheet | Hanya baca (dapat menggunakan sebagian besar metode get*() , tetapi tidak set*() ).Tidak dapat membuka spreadsheet lain ( SpreadsheetApp.openById()
atau SpreadsheetApp.openByUrl() ). |
Pengambilan URL | |
Utilitas | |
XML |
Jika fungsi kustom Anda menampilkan pesan error You do not have permission to
call X service.
, layanan memerlukan otorisasi pengguna sehingga tidak dapat
yang digunakan dalam fungsi kustom.
Untuk menggunakan layanan selain yang tercantum di atas, buat menu kustom yang menjalankan fungsi Apps Script alih-alih menulis fungsi khusus. Sebuah fungsi yang dipicu dari menu akan meminta otorisasi kepada pengguna jika diperlukan dan akibatnya dapat menggunakan semua Layanan Apps Script.
Berbagi
Fungsi kustom dimulai terikat pada {i>spreadsheet<i} tempat mereka dibuat. Ini berarti bahwa fungsi khusus yang ditulis dalam satu {i>spreadsheet <i}tidak dapat digunakan di {i>spreadsheet <i}lain kecuali Anda menggunakan metode berikut:
- Klik Ekstensi > Apps Script untuk buka editor skrip, lalu salin teks skrip dari spreadsheet asli dan tempelkan ke editor skrip dari {i>spreadsheet <i}lain.
- Buat salinan {i>spreadsheet<i} yang berisi fungsi khusus dengan mengklik File > Buat salinan. Saat {i>spreadsheet<i} disalin, semua skrip yang dilampirkan data itu disalin juga. Siapa saja yang memiliki akses ke {i>spreadsheet<i} dapat menyalin {i>script<i}. (Kolaborator yang hanya memiliki akses lihat tidak dapat membuka editor skrip dalam {i>spreadsheet <i}asli. Namun, ketika mereka membuat salinan, mereka menjadi pemilik salinan dan dapat melihat skripnya.)
- Publikasikan skrip sebagai Add-on Editor Google Spreadsheet.
Pengoptimalan
Setiap kali fungsi khusus digunakan dalam {i>spreadsheet<i}, Google Sheets membuat panggilan terpisah ke server Apps Script. Jika {i>spreadsheet <i}Anda berisi lusinan (atau ratusan, atau ribuan!) panggilan fungsi khusus, proses ini bisa sangat lambat.
Akibatnya, jika Anda berencana untuk menggunakan fungsi khusus beberapa kali pada {i>range<i} data, pertimbangkan untuk memodifikasi fungsi sehingga dapat menerima rentang sebagai dalam bentuk larik dua dimensi, kemudian mengembalikan yang bisa meluap ke sel yang sesuai.
Misalnya, fungsi DOUBLE()
yang ditampilkan di atas dapat ditulis ulang untuk menerima
sel tunggal atau rentang sel sebagai berikut:
/**
* 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;
}
Pendekatan di atas menggunakan
map dari objek Array
JavaScript untuk secara rekursif
memanggil DOUBLE
di setiap nilai dalam array sel dua dimensi. Metode ini mengembalikan
array dua dimensi yang
berisi hasil. Dengan cara ini, Anda dapat memanggil DOUBLE
sekali saja tetapi membuatnya menghitung sejumlah besar
sel sekaligus, seperti ditunjukkan dalam
screenshot di bawah. (Anda dapat mencapai hal yang sama dengan if
bertingkat
alih-alih panggilan map
.)
Demikian juga, fungsi khusus di bawah ini mengambil konten live secara efisien dari Internet dan menggunakan array dua dimensi untuk menampilkan dua kolom hasil dengan hanya dengan satu panggilan fungsi. Jika setiap sel memerlukan panggilan fungsinya sendiri, akan memakan waktu lebih lama, karena server Apps Script akan harus mendownload dan mengurai feed XML setiap saat.
/**
* 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;
}
Teknik ini dapat diterapkan ke hampir semua fungsi kustom yang digunakan berulang kali di seluruh {i>spreadsheet<i}, meskipun detail implementasinya akan bervariasi tergantung pada perilaku {i>function<i}.