Documentazione di riferimento completa per le formule di fogli di calcolo Google?


21

Come programmatore, mi sento un po 'frustrato quando provo ad usare Fogli di lavoro Google, perché non sembra esserci una descrizione definitiva della sintassi che posso usare per le formule. Ad esempio, ho letto che posso usare F3:Fper fare riferimento alla Fcolonna dalla riga 3 in poi, ma non riesco a trovare dove lo menziona nella documentazione di riferimento di Google e non sempre sembra funzionare. Probabilmente sto sbagliando, ma questo è il punto di questa domanda.

Non voglio esplorare cinque diversi tutorial per provare a indovinare le regole! C'è una descrizione sintetica della grammatica e della semantica disponibile da qualche parte? Altrimenti, forse qualcuno potrebbe riassumerlo qui.


docs.google.com/support/bin/… Non so se questo sarà di alcun aiuto (motivo per cui è solo un commento :))
Matt

1
grazie, questa è una parte utile dell'immagine, ma perché non possono documentare l'intera faccenda ?!
rog

Nessun problema, non ho idea del perché non lo facciano, ma è abbastanza simile a execl e ci sono solo alcune modifiche alla sintassi. Se sei mai bloccato puoi sempre chiedere qui :)
Matt,

Risposte:


11

Questo è un testo estratto da qui . L'ho pubblicato qui come un uomo di paglia. Se qualcuno che sa in che modo differisce dalle formule di Google Spreadsheets potrebbe fare un commento, allora forse possiamo finire con una buona risposta.

formule

Le formule consentono di eseguire calcoli all'interno delle celle della tabella. Ogni formula può iniziare con un prefisso dello spazio dei nomi che specifica la sintassi e la semantica utilizzate all'interno della formula. Quando non è presente alcun prefisso, vengono utilizzate la sintassi della formula predefinita e la semantica come descritto di seguito. Questo è seguito da un segno di uguale e quindi dalla formula stessa. Le implementazioni possono accettare più sintassi della formula e possono accettare varie estensioni alla sintassi della formula predefinita. Tuttavia, tutte le implementazioni che accettano le formule DEVONO accettare la sintassi e la semantica delle formule predefinite come descritto qui. Possono anche accettare estensioni ad esso.

Un documento che implementa lo schema rigoroso NON PU use utilizzare un prefisso dello spazio dei nomi della formula (poiché non esiste alcuna garanzia che altri sistemi di ricezione siano in grado di elaborarlo) e NON PU use utilizzare alcuna estensione della semantica e della sintassi descritte di seguito .: Nella formula predefinita sintassi, dopo il segno di uguale iniziale una formula deve essere un'espressione. Un'espressione può essere un numero, una stringa costante, un intervallo denominato, una coppia di espressioni collegate da un operatore binario, un'espressione preceduta da un operatore unario, un operatore logico, una chiamata di funzione, un indirizzo di cella o un'espressione circondata da parentesi. Una chiamata di funzione e un operatore logico possono avere zero o più parametri separati da punto e virgola e ogni parametro DEVE essere un'espressione. La sintassi per ciascuno di questi è la seguente:

  • Numeri. I numeri vengono scritti e letti in questo formato usando la locale "C" (usando il separatore decimale "." E nessun separatore delle migliaia), usando setlocale (LC_NUMERIC, "C") o equivalente. I numeri possono terminare in%, il che divide quel numero per 100. Il “%” non cambia il significato di altri operatori, quindi il 2 + 10% è 2.1 (non 2.2). Si noti che i segni iniziali - e + sono consentiti come operatori unari, descritti di seguito. Gli scrittori DEVONO scrivere numeri che corrispondono allo schema (si noti che deve iniziare con una cifra): [0-9] + (. [0-9] +)? ([EE] [+ -]? [0-9] + )?%? I lettori DEVONO essere in grado di leggere questi numeri, nonché accettare numeri che iniziano con un "." Iniziale, quindi devono essere in grado di leggere i numeri nel modulo: ((. [0-9] +) | ([0- 9] + (. [0-9] +)? ([EE] [+ -]? [0-9] +)?))%? Stringhe costanti. Le stringhe costanti sono racchiuse tra virgolette doppie; per incorporare una doppia citazione, il carattere a virgoletta doppia viene utilizzato due volte. Le stringhe sono memorizzate nel formato UTF-8. Si noti che poiché tutto il contenuto viene archiviato come XML, tutte le doppie virgolette nella formula vengono effettivamente archiviate come "nell'XML. Le stringhe costanti corrispondono al modello: \" ([^ "] | \" \ ") * \"

  • Intervalli / campi nominati. Intervalli / campi denominati si riferiscono a un valore definito definito o a un insieme di valori (in un foglio di calcolo, in genere riferito a un indirizzo di cella o a un insieme di indirizzi). I nomi non fanno distinzione tra maiuscole e minuscole, quindi "a" e "A" si riferiscono allo stesso intervallo. Le implementazioni devono accettare almeno intervalli denominati che corrispondono al seguente modello: [A-Za-z] [A-Za-z0-9 _] *

  • Operatori. Sono accettati operatori ordinari di infissi e prefissi. Questi hanno la seguente associatività e precedenza (dalla priorità più bassa alla più alta):

Commenti degli operatori associativi
left <, =,>, <=,> =, <> Minore di, uguale a, maggiore di,
                                     minore o uguale a, maggiore o uguale a,
                                     non uguale a.
sinistra +, -, & Aggiungi, sottrai, concatenazione di stringhe. Nota che
                                     unario (prefisso) + e - ha una priorità diversa.
sinistra *, / Moltiplica, dividi. La divisione non si tronca, quindi
                                     1/2 è uguale a 0,5.
destra ^ Potenza (2 ^ 3 è 8). I lettori DOVREBBERO anche accettare "**".
nessuno +, - Prefisso operatori unari, ad es. -5 o - [. A1].
                                     Si noti che questi hanno una differenza di precedenza rispetto a
                                     aggiungere e sottrarre.

La precedenza può essere ignorata usando le parentesi, quindi “= 2 + 3 * 4” calcola 14 mentre “= (2 + 3) * 4” calcola 20. Nota che +, -, *, /, ^ converte qualsiasi stringa o valore binario usano in numeri prima dell'elaborazione; notare che & (concatenazione di stringhe) converte qualsiasi valore in stringhe prima di concatenarle. Operatori logici. Gli operatori logici hanno la stessa sintassi delle chiamate di funzione; i loro nomi non fanno distinzione tra maiuscole e minuscole, i parametri sono separati da punti e virgola e il loro nome DEVE essere seguito da parentesi. Gli operatori logici sono:


Conteggio parametri operatore Commento
TRUE () 0 Questa è una costante booleana, sebbene la sua sintassi la faccia apparire come una funzione
FALSE () 0 Questa è una costante booleana
NOT (espressione) 1 Se expression è TRUE () restituisce FALSE (), else restituisce TRUE ()
AND (e1; e2 [; e] *) 2 o più Se tutte le espressioni sono TRUE () restituisce TRUE (), altrimenti restituisce FALSE ()
OR (e1; e2 [; e] *) 2 o più Se tutte le espressioni sono FALSE () restituisce FALSE (), else restituisce TRUE ()
IF (condizione; true_exp; false_exp)
                   3 Valuta le condizioni. Se è vero, restituisce true_exp, altrimenti restituisce false_exp

Le implementazioni di AND (), OR () e IF () devono cortocircuitare, cioè devono valutare da sinistra a destra a turno e valutare solo le espressioni che devono valutare per calcolare il risultato. Un'implementazione può scegliere di valutare di più, ma solo quando le espressioni non hanno effetti collaterali. Le implementazioni di AND () e OR () DOVREBBERO accettare un numero arbitrario di parametri, ma DEVONO accettare almeno 30 in ciascun utilizzo. Le operazioni NOT (), AND () e OR (), nonché la condizione in IF (), sono intese per valori booleani; se vengono utilizzate espressioni di altri tipi, un'implementazione NON DOVREBBE considerare 0 come falso e qualsiasi altro valore numerico come vero e NON DOVREBBE considerare una stringa di lunghezza zero come falsa e qualsiasi altro valore di stringa come vero. Se viene calcolato un valore di errore per un'espressione, quel primo errore è il risultato dell'operazione logica.


Chiamate di funzione.Una chiamata di funzione ha un nome di funzione corrispondente al modello [A-za-z] [A-Za-z0-9 _] * seguito da una parentesi aperta, zero o più parametri e una parentesi chiusa. I parametri sono separati da un punto e virgola (non una virgola), anche se i lettori POSSONO accettare facoltativamente chiamate di funzione usando anche virgole come separatori. I nomi delle funzioni non fanno distinzione tra maiuscole e minuscole, quindi "sum" e "SUM" sono la stessa funzione. Se ci sono parametri, ognuno deve essere un'espressione e nessuno può essere vuoto, quindi X (;) non è una chiamata di funzione legale mentre RAND () è perfettamente legale. Se un parametro è facoltativo, PUO 'essere omesso, ma se omesso anche il suo separatore DEVE essere omesso (le specifiche delle funzioni dovrebbero indicare quali parametri sono opzionali e cosa significa ometterli). Le implementazioni tipiche avranno molte funzioni integrate, e la maggior parte delle implementazioni supporta anche uno o più modi per creare funzioni definite dall'utente. Le funzioni comuni includono:

  • SOMMA ( elenco ): somma tutti i numeri negli intervalli dell'elenco .
  • COUNT ( elenco ): conta il numero di numeri negli intervalli dell'elenco
  • MEDIA ( elenco ): calcola la media, uguale a SOMMA ( elenco ) / COUNT ( elenco )
  • MIN ( elenco ) - valore numerico minimo dell'elenco
  • MAX ( elenco ) - valore massimo dell'elenco
  • ROUND ( n , count ) - arrotondare n per contare le cifre (se count omesso, count = 0)
  • INT ( n ) - arrotondare n verso il basso all'intero più vicino.
  • ISEVEN ( n ) - restituisce TRUE () se n è pari, altrimenti restituisce FALSE ().
  • SUBSTITUTE ( testo ; Testo di ricerca ; newText ; occorrenza ) - sostituti newText per Testo di ricerca nel testo , occorrenza numero di volte (se occorrenza omesso, tutte volte).

Indirizzi di celle che contengono numeri . Gli indirizzi possono essere relativi o assoluti. Un indirizzo relativo è costituito da una lettera di colonna e un numero di riga. Il prefisso della lettera o del numero di colonna con a $rende assoluta la riga o la colonna.

Lo spazio bianco (spazio, tabulazione, ritorno a capo e ritorno a capo) viene ignorato nella sintassi delle formule predefinite, tranne nel contenuto delle costanti di stringa e come separatore per più indirizzi di intervallo di celle in un elenco di indirizzi di intervallo di celle.

Le interfacce utente delle implementazioni POSSONO scegliere di accettare e visualizzare formule in modo diverso da come vengono scambiate in questo formato di dati. Ad esempio, POSSONO accettare e visualizzare i numeri utilizzando il formato della locale corrente, POTREBBE usare sempre una locale specifica per i formati numerici, POTREBBERO utilizzare virgole anziché punti e virgola per i separatori di parametri e POTREBBE accettare e visualizzare gli indirizzi di cella senza richiedere il uso di parentesi quadre. Ma le interfacce utente di implementazione DOVREBBERO accettare anche il formato predefinito come input, laddove possibile, ad esempio, le implementazioni DOVREBBERO accettare numeri che soddisfano i requisiti delle impostazioni locali “C” (così come le impostazioni internazionali correnti) e DOVREBBE accettare indirizzi di cella tra parentesi. Inoltre, le interfacce utente di implementazione DOVREBBERO correggere errori probabili, possibilmente con un dialogo. Per esempio,

Di seguito è riportato un esempio di una formula semplice:

=sum(A1:A5)

Questa formula calcola la somma dei valori di tutte le celle nell'intervallo ".A1: .A5". La funzione è "somma". I parametri sono contrassegnati da un “(“ all'inizio e un “)” alla fine. Se una funzione contiene più di un parametro, i parametri sono separati da un “;”. Di seguito è una variante della formula mostrata sopra:

=sum(A1;A2;A3;A4;A5)

Il risultato di questa formula è lo stesso. I componenti utilizzati nella formula dipendono dall'applicazione che si sta utilizzando.


Ottima risposta, @rog. Hai idea del perché la documentazione della funzione Google utilizza virgole anziché punti e virgola per separare i parametri? Non funzionano in nessuno dei miei test.
Jpsy

@Jpsy: il separatore dei parametri dipende dalle impostazioni del foglio di calcolo. Il punto e virgola viene utilizzato quando la virgola è il separatore dei decimali.
Rubén,


"Le implementazioni di AND (), OR () e IF () devono cortocircuitare" --- sfortunatamente non lo capisco in Google Spreadsheets al momento in cui scrivo. Ho provato "AND (FALSE, un'espressione con tipo non corrispondente)", e invece di ignorare la seconda parte il risultato è un errore dal secondo operando. Fortunatamente, esiste una soluzione alternativa su stackoverflow: stackoverflow.com/a/16926642/2184166
ob-ivan,

6

Dopo aver cercato un po 'di più, lo trovo

  1. Le formule di fogli di calcolo di Google implementano uno standard di fatto , seguendo Microsoft Excel e altri.
  2. Lo standard sembra non essere mai stato definito correttamente .

Il più vicino che ho trovato in una definizione completa era in questo vecchio post della mailing list: http://lists.oasis-open.org/archives/office-comment/200411/msg00000.html , che contiene una grammatica yacc, un tokenizer lex, e una breve descrizione della semantica.

Non è chiaro quanto ciò corrisponda all'implementazione del foglio di calcolo di Google: diversi esempi non funzionano nei fogli di calcolo di Google.

Questo sembra un triste stato di cose. Qualsiasi anticipo su queste informazioni sarebbe molto apprezzato.


Ci sono stati molti progressi dal post sopra. Per quanto riguarda OpenDocument vedere gli annunci su oasis-open.org/committees/tc_home.php?wg_abbrev=office
Rubén

-2

https://repository.tudelft.nl/islandora/object/uuid:d9d802af-9ebf-4524-9dbc-e7657d67921e/datastream/OBJ/download

La tesi di master di David Hoepelman "refactoring di fogli di calcolo assistito dallo strumento e analisi delle formule di fogli di calcolo" (Delft University of Technology) è di gran lunga la migliore descrizione della sintassi delle formule di fogli di calcolo che abbia mai visto. BNF, validazione empirica e tutte le guarnizioni. Eppure abbastanza semplice da essere una buona guida per progetti codificati a mano. XLParser è il progetto open source GitHub di accompagnamento a cui fa riferimento la tesi.

Purtroppo è per Excel non i fogli ma nella misura in cui le formule dei fogli sono compatibili con Excel è un ottimo punto di partenza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.