Sebagai seorang programmer, saya merasa agak frustrasi ketika mencoba menggunakan Google Spreadsheets, karena sepertinya tidak ada deskripsi pasti tentang sintaks yang dapat saya gunakan untuk rumus. Misalnya, saya telah membaca yang dapat saya gunakan F3:F
untuk merujuk ke F
kolom dari baris 3 ke bawah, tetapi saya tidak dapat menemukan di mana ia menyebutkan ini dalam dokumentasi referensi Google, dan sepertinya tidak selalu berhasil. Saya mungkin salah melakukannya, tetapi itulah inti dari pertanyaan ini.
Saya tidak ingin menjelajah melalui lima tutorial berbeda untuk mencoba menebak aturannya! Apakah ada penjelasan ringkas tentang tata bahasa dan semantik yang tersedia di suatu tempat? Jika tidak, mungkin seseorang dapat meringkasnya di sini.
Jawaban:
Ini adalah beberapa teks yang dikutip dari sini . Saya telah diposting di sini sebagai pria jerami. Jika ada orang yang tahu bagaimana ini berbeda dari rumus di Google Spreadsheets dapat membuat komentar, maka mungkin kita bisa mendapatkan jawaban yang bagus.
Formula
Rumus memungkinkan Anda untuk melakukan perhitungan dalam sel tabel. Setiap rumus MUNGKIN dimulai dengan awalan namespace menentukan sintaks dan semantik yang digunakan dalam rumus. Ketika tidak ada awalan, sintaks dan semantik rumus standar seperti dijelaskan di bawah ini digunakan. Ini diikuti oleh tanda sama dengan dan kemudian rumus itu sendiri. Implementasi MUNGKIN menerima beberapa sintaks rumus, dan mereka MUNGKIN menerima berbagai ekstensi untuk sintaks rumus standar. Namun, semua implementasi yang menerima rumus HARUS menerima sintaks dan semantik rumus standar seperti dijelaskan di sini. Mereka MUNGKIN juga menerima ekstensi untuk itu.
Dokumen yang menerapkan skema ketat MUNGKIN TIDAK menggunakan awalan rumus namespace (karena tidak ada jaminan bahwa sistem penerima lain akan dapat memprosesnya), dan MUNGKIN TIDAK menggunakan ekstensi apa pun untuk semantik dan sintaks yang dijelaskan di bawah ini: Dalam rumus default sintaks, setelah tanda sama dengan awal rumus harus berupa ekspresi. Ekspresi dapat berupa angka, string konstan, rentang bernama, sepasang ekspresi yang dihubungkan oleh operator biner, ekspresi yang diawali oleh operator unary, operator logis, panggilan fungsi, alamat sel, atau ekspresi yang dikelilingi oleh tanda kurung. Panggilan fungsi dan operator logika mungkin memiliki nol atau lebih parameter yang dipisahkan dengan titik koma, dan setiap parameter HARUS berupa ekspresi. Sintaks untuk masing-masing adalah sebagai berikut:
Angka. Angka ditulis dan dibaca dalam format ini menggunakan lokal "C" (menggunakan pemisah desimal "." Dan tidak ada pemisah ribuan), menggunakan setlocale (LC_NUMERIC, "C") atau yang setara. Angka dapat diakhiri dengan%, yang membagi angka itu dengan 100. "%" tidak mengubah arti dari operator lain, jadi 2 + 10% adalah 2.1 (bukan 2.2). Perhatikan bahwa tanda - dan + utama diijinkan sebagai operator yang tidak disorot, dijelaskan di bawah ini. Penulis HARUS menulis angka yang sesuai dengan pola (perhatikan bahwa angka itu harus dimulai dengan angka): [0-9] + (. [0-9] +)? ([EE] [+ -]? [0-9] + )?%? Pembaca HARUS dapat membaca angka-angka ini, serta menerima angka yang dimulai dengan "." Yang memimpin, sehingga mereka harus dapat membaca angka-angka dalam bentuk: ((. [0-9] +) | ([0- 9] + (. [0-9] +)? ([EE] [+ -]? [0-9] +)?))%? String Konstan .. String konstan dikelilingi oleh tanda kutip ganda; untuk menanamkan kutipan ganda, karakter kutipan ganda digunakan dua kali. String disimpan dalam format UTF-8. Perhatikan bahwa karena semua konten disimpan sebagai XML, semua tanda kutip ganda dalam rumus sebenarnya disimpan sebagai "dalam XML. String konstan cocok dengan pola: \" ([^ "] | \" \ ") * \"
Rentang / Bidang yang dinamai. Rentang / bidang yang dinamai mengacu pada nilai yang ditentukan atau set nilai yang terpisah (dalam spreadsheet, biasanya merujuk ke alamat sel atau set alamat). Nama tidak peka terhadap huruf besar-kecil, jadi "a" dan "A" merujuk ke rentang yang sama. Implementasi harus menerima setidaknya rentang bernama yang cocok dengan pola berikut: [A-Za-z] [A-Za-z0-9 _] *
Operator. Operator infiks dan awalan biasa diterima. Ini memiliki asosiatif dan prioritas di bawah ini (dari prioritas terendah ke tertinggi):
Precedence dapat diganti dengan menggunakan tanda kurung, jadi "= 2 + 3 * 4" menghitung 14 sementara "= (2 + 3) * 4" menghitung 20. Perhatikan bahwa +, -, *, /, ^ mengonversi string atau nilai biner apa pun mereka menggunakan angka sebelum komputasi; perhatikan bahwa & (rangkaian string) mengubah nilai apa pun menjadi string sebelum menggabungkannya. Operator logis. Operator logis memiliki sintaks yang sama dengan panggilan fungsi; nama mereka case-insensitive, parameter dipisahkan oleh titik koma, dan nama mereka HARUS diikuti oleh tanda kurung. Operator logis adalah:
Implementasi AND (), OR (), dan IF () harus mengalami hubungan pendek, yaitu, mereka harus mengevaluasi dari kiri ke kanan secara bergantian, dan hanya mengevaluasi ekspresi yang harus mereka evaluasi untuk menghitung hasilnya. Suatu implementasi dapat memilih untuk mengevaluasi lebih banyak, tetapi hanya ketika ekspresi tidak memiliki efek samping. Implementasi AND () dan OR () HARUS menerima jumlah parameter sewenang-wenang, tetapi HARUS menerima setidaknya 30 dalam setiap penggunaan. Operasi NOT (), AND (), dan OR (), serta kondisi dalam IF (), dimaksudkan untuk nilai boolean; jika ekspresi jenis lain digunakan, implementasi TIDAK HARUS menganggap 0 sebagai salah dan nilai numerik lainnya benar, dan TIDAK HARUS menganggap string panjang nol sebagai false dan nilai string lainnya sebagai benar. Jika nilai kesalahan dihitung untuk ekspresi, maka kesalahan pertama adalah hasil dari operasi logis.
Panggilan fungsi.Panggilan fungsi memiliki nama fungsi yang cocok dengan pola [A-za-z] [A-Za-z0-9 _] * diikuti oleh tanda kurung pembuka, nol atau lebih parameter, dan tanda kurung penutup. Parameter dipisahkan oleh tanda titik koma (bukan koma), meskipun pembaca MUNGKIN menerima panggilan fungsi menggunakan koma sebagai pemisah juga. Nama fungsi adalah case-insensitive, jadi "sum" dan "SUM" adalah fungsi yang sama. Jika ada parameter, masing-masing harus berupa ekspresi dan tidak ada yang bisa kosong, jadi X (;) bukan panggilan fungsi yang sah sementara RAND () benar-benar legal. Jika suatu parameter bersifat opsional, itu MUNGKIN dihilangkan, tetapi jika dihilangkan pemisahnya HARUS dihilangkan juga (spesifikasi fungsi harus menyatakan parameter mana yang opsional, dan apa artinya menghilangkannya). Implementasi umum akan memiliki banyak fungsi bawaan, dan sebagian besar implementasi juga mendukung satu atau lebih cara untuk membuat fungsi yang ditentukan pengguna. Fungsi umum meliputi:
Alamat sel yang berisi angka . Alamatnya bisa relatif atau absolut. Alamat relatif terdiri dari huruf kolom dan nomor baris. Awalan huruf baris atau nomor kolom dengan a
$
membuat baris atau kolom mutlak.Spasi putih (spasi, tab, baris baru, dan carriage return) diabaikan dalam sintaks rumus default, kecuali dalam konten konstanta string dan sebagai pemisah untuk beberapa alamat rentang sel dalam daftar alamat rentang sel.
Antarmuka pengguna implementasi MUNGKIN memilih untuk menerima dan menampilkan formula berbeda dari bagaimana mereka dipertukarkan dalam format data ini. Misalnya, mereka MUNGKIN menerima dan menampilkan angka menggunakan format lokal saat ini, mereka MUNGKIN selalu menggunakan lokal tertentu untuk format numerik, mereka MUNGKIN menggunakan koma alih-alih titik koma untuk pemisah parameter, dan mereka MUNGKIN menerima dan menampilkan alamat sel tanpa memerlukan penggunaan kurung kotak. Tetapi antarmuka pengguna implementasi HARUS menerima format default sebagai input juga jika mungkin, misalnya, implementasi HARUS menerima angka yang memenuhi persyaratan lokal "C" (serta lokal saat ini), dan HARUS menerima alamat sel kurung. Juga, implementasi antarmuka pengguna HARUS memperbaiki kemungkinan kesalahan, mungkin dengan dialog. Sebagai contoh,
Berikut ini adalah contoh rumus sederhana:
=sum(A1:A5)
Rumus ini menghitung jumlah nilai semua sel dalam rentang ".A1: .A5". Fungsinya adalah "jumlah". Parameter ditandai oleh "(" di awal dan ")" di akhir. Jika suatu fungsi mengandung lebih dari satu parameter, parameter dipisahkan oleh “;”. Berikut ini adalah variasi dari rumus yang ditunjukkan di atas:
=sum(A1;A2;A3;A4;A5)
Hasil formula ini sama. Komponen yang Anda gunakan dalam rumus tergantung pada aplikasi yang Anda gunakan.
sumber
Setelah mencari-cari lagi, saya menemukan itu
Yang paling dekat yang saya temukan dengan definisi komprehensif ada di pos milis lama ini: http://lists.oasis-open.org/archives/office-comment/200411/msg00000.html , yang berisi tata bahasa yacc, tokenizer lex, dan deskripsi singkat tentang semantik.
Tidak jelas seberapa dekat hal ini terkait dengan implementasi Google Spreadsheet - beberapa contoh tidak berfungsi di Google Spreadsheets.
Tampaknya ini urusan yang menyedihkan. Setiap kemajuan pada informasi ini akan sangat dihargai.
sumber
https://repository.tudelft.nl/islandora/object/uuid:d9d802af-9ebf-4524-9dbc-e7657d67921e/datastream/OBJ/download
Tesis master David Hoepelman "alat bantu spreadsheet refactoring dan parsing formula spreadsheet" (Delft University of Technology) sejauh ini merupakan deskripsi terbaik dari sintaks rumus spreadsheet yang pernah saya lihat. BNF, validasi empiris, dan semua fasilitasnya. Namun cukup sederhana untuk menjadi panduan yang baik untuk proyek kode tangan. XLParser adalah proyek sumber terbuka GitHub yang dirujuk dalam tesis.
Sayangnya itu untuk Excel bukan sheet tetapi pada tingkat bahwa formula sheet Excel kompatibel itu adalah tempat yang bagus untuk memulai.
sumber