Vollständige Referenzdokumentation für Google Spreadsheets-Formeln?

21

Als Programmierer bin ich etwas frustriert, wenn ich versuche, Google Spreadsheets zu verwenden, da es anscheinend keine definitive Beschreibung der Syntax gibt, die ich für Formeln verwenden kann. Ich habe zum Beispiel gelesen, dass ich F3:Fdie FSpalte ab Zeile 3 verwenden kann, aber ich kann nicht finden, wo dies in der Google-Referenzdokumentation erwähnt wird, und es scheint nicht immer zu funktionieren. Ich mache es wahrscheinlich falsch, aber darum geht es in dieser Frage.

Ich möchte nicht fünf verschiedene Tutorials durchforsten, um zu versuchen, die Regeln zu erraten! Gibt es irgendwo eine kurze Beschreibung der Grammatik und Semantik? Wenn nicht, könnte es vielleicht jemand hier zusammenfassen.

Rog
quelle
docs.google.com/support/bin/… Weiß nicht , ob dies überhaupt hilfreich sein wird (weshalb es nur einen Kommentar gibt :))
Matt
1
danke, das ist ein nützlicher Teil des Bildes, aber warum können sie das Ganze nicht dokumentieren ?!
Rog
Kein Problem, keine Ahnung, warum sie es nicht tun, aber es ist ziemlich ähnlich zu execl und es gibt nur ein paar Syntaxänderungen. Wenn Sie jemals stecken geblieben sind, können Sie hier immer nachfragen :)
Matt

Antworten:

11

Dies ist ein Text aus exzerpiert hier . Ich habe es hier als Strohmann gepostet. Wenn jemand, der weiß, wie sich dies von den Formeln in Google Spreadsheets unterscheidet, einen Kommentar abgeben kann, können wir vielleicht eine gute Antwort finden.

Formeln

Mit Formeln können Sie Berechnungen in Tabellenzellen durchführen. Jede Formel KANN mit einem Namespace-Präfix beginnen, das die in der Formel verwendete Syntax und Semantik angibt. Wenn kein Präfix vorhanden ist, werden die unten beschriebene Standardformelsyntax und -semantik verwendet. Darauf folgt ein Gleichheitszeichen und dann die Formel selbst. Implementierungen KÖNNEN mehrere Formelsyntaxen akzeptieren, und sie KÖNNEN verschiedene Erweiterungen der Standardformelsyntax akzeptieren. Alle Implementierungen, die Formeln akzeptieren, MÜSSEN jedoch die hier beschriebene Standardformelsyntax und -semantik akzeptieren. Sie können auch Erweiterungen akzeptieren.

Ein Dokument, das das strenge Schema implementiert, KANN KEIN Formel-Namespace-Präfix verwenden (da nicht garantiert wird, dass andere empfangende Systeme es verarbeiten können) und KANN KEINE Erweiterungen der nachstehend beschriebenen Semantik und Syntax verwenden: In der Standardformel Syntax: Nach dem anfänglichen Gleichheitszeichen muss eine Formel ein Ausdruck sein. Ein Ausdruck kann eine Zahl, eine konstante Zeichenfolge, ein benannter Bereich, ein Paar von Ausdrücken sein, die durch einen binären Operator verbunden sind, ein Ausdruck, dem ein unärer Operator vorangestellt ist, ein logischer Operator, ein Funktionsaufruf, eine Zellenadresse oder ein Ausdruck, der von umgeben ist Klammern. Ein Funktionsaufruf und ein logischer Operator können null oder mehr durch Semikolons getrennte Parameter enthalten, und jeder Parameter MUSS ein Ausdruck sein. Die Syntax für jedes dieser Elemente lautet wie folgt:

  • Zahlen. Zahlen werden in diesem Format unter Verwendung des Gebietsschemas "C" (unter Verwendung des Dezimaltrennzeichens "." Und ohne Tausendertrennzeichen), unter Verwendung von setlocale (LC_NUMERIC, "C") oder eines entsprechenden Zeichens geschrieben und gelesen. Zahlen können in% enden, wodurch diese Zahl durch 100 geteilt wird. Das "%" ändert nichts an der Bedeutung anderer Operatoren, daher beträgt 2 + 10% 2,1 (nicht 2,2). Beachten Sie, dass die führenden Zeichen - und + als unäre Operatoren zulässig sind (siehe unten). Die Schreiber MÜSSEN Zahlen schreiben, die mit dem Muster übereinstimmen (beachten Sie, dass es mit einer Ziffer beginnen muss): [0-9] + (. [0-9] +)? ([EE] [+ -]? [0-9] + )?%? Leser MÜSSEN in der Lage sein, diese Zahlen zu lesen und Zahlen zu akzeptieren, die mit einem vorangestellten „.“ Beginnen. Daher müssen sie in der Lage sein, Zahlen in der folgenden Form zu lesen: ((. [0-9] +) | ([0- 9] + (. [0-9] +)? ([EE] [+ -]? [0-9] +)?))%? Konstante Zeichenfolgen .. Konstante Zeichenfolgen werden in Anführungszeichen gesetzt. ein doppeltes Anführungszeichen einbetten, das doppelte Anführungszeichen wird zweimal verwendet. Zeichenfolgen werden im UTF-8-Format gespeichert. Da der gesamte Inhalt als XML gespeichert ist, werden alle Anführungszeichen in der Formel tatsächlich als "im XML" gespeichert. Konstante Zeichenfolgen entsprechen dem Muster: "([^"] | "") * "

  • Benannte Bereiche / Felder. Benannte Bereiche / Felder beziehen sich auf einen getrennten definierten Wert oder eine Gruppe von Werten (in einer Kalkulationstabelle in der Regel auf eine Zellenadresse oder eine Gruppe von Adressen). Bei Namen wird nicht zwischen Groß- und Kleinschreibung unterschieden, daher beziehen sich „a“ und „A“ auf denselben Bereich. Implementierungen müssen mindestens benannte Bereiche akzeptieren, die dem folgenden Muster entsprechen: [A-Za-z] [A-Za-z0-9 _] *

  • Betreiber. Normale Infix- und Präfixoperatoren werden akzeptiert. Diese haben die folgende Assoziativität und Priorität (von der niedrigsten zur höchsten Priorität):

Assoziativitätsoperator (en) Kommentare
left <, =,>, <=,> =, <> Kleiner als, gleich, größer als,
                                     kleiner als oder gleich, größer als oder gleich,
                                     Nicht gleichzusetzen mit.
Links +, -, & Addieren, Subtrahieren, Verketten von Strings. Beachten Sie, dass
                                     unary (Präfix) + und - haben unterschiedliche Priorität.
left *, / Multiplizieren, dividieren. Division schneidet also nicht ab
                                     1/2 ist gleich 0,5.
richtig ^ Potenz (2 ^ 3 ist 8). Leser sollten auch "**" akzeptieren.
none +, - Präfix für unäre Operatoren, z. B. -5 oder - [. A1].
                                     Beachten Sie, dass diese einen anderen Vorrang haben als
                                     addieren und subtrahieren.

Die Priorität kann durch die Verwendung von Klammern überschrieben werden. "= 2 + 3 * 4" berechnet 14, während "= (2 + 3) * 4" 20 berechnet. Beachten Sie, dass +, -, *, /, ^ beliebige Zeichenfolgen oder Binärwerte konvertieren Sie werden vor dem Rechnen in Zahlen umgewandelt. Beachten Sie, dass & (String-Verkettung) alle Werte in Strings konvertiert, bevor sie verkettet werden. Logische Operatoren. Logische Operatoren haben dieselbe Syntax wie Funktionsaufrufe. Bei ihren Namen wird die Groß- / Kleinschreibung nicht beachtet, die Parameter werden durch Semikolons getrennt, und hinter ihrem Namen MÜSSEN Klammern stehen. Die logischen Operatoren sind:


Operator Parameter Anzahl Kommentar
TRUE () 0 Dies ist eine boolesche Konstante, die jedoch aufgrund ihrer Syntax wie eine Funktion aussieht
FALSE () 0 Dies ist eine Boolesche Konstante
NOT (Ausdruck) 1 Wenn Ausdruck TRUE () ist, wird FALSE () zurückgegeben, andernfalls wird TRUE () zurückgegeben.
AND (e1; e2 [; e] *) 2 oder mehr Wenn alle Ausdrücke TRUE () sind, wird TRUE () zurückgegeben, andernfalls wird FALSE () zurückgegeben.
OR (e1; e2 [; e] *) 2 oder mehr Wenn alle Ausdrücke FALSE () sind, wird FALSE () zurückgegeben, andernfalls wird TRUE () zurückgegeben.
IF (Bedingung; true_exp; false_exp)
                   3 Wertet den Zustand aus. Wenn dies der Fall ist, geben Sie true_exp zurück, andernfalls false_exp

Implementierungen von AND (), OR () und IF () müssen kurzschließen, dh von links nach rechts auswerten und nur die Ausdrücke auswerten, die zur Berechnung des Ergebnisses ausgewertet werden müssen. Eine Implementierung kann entscheiden, mehr zu evaluieren, aber nur, wenn die Ausdrücke keine Nebenwirkungen haben. Implementierungen von AND () und OR () MÜSSEN eine beliebige Anzahl von Parametern akzeptieren, MÜSSEN jedoch mindestens 30 bei jeder Verwendung akzeptieren. Die Operationen NOT (), AND () und OR () sowie die Bedingung in IF () sind für Boolesche Werte vorgesehen. Wenn Ausdrücke anderer Typen verwendet werden, SOLLTE eine Implementierung NICHT 0 als falsch und keinen anderen numerischen Wert als wahr und SOLLTE KEINE Zeichenfolge mit der Länge Null als falsch und keinen anderen Zeichenfolgewert als wahr betrachten. Wenn ein Fehlerwert für einen Ausdruck berechnet wird, ist dieser erste Fehler das Ergebnis der logischen Operation.


Funktionsaufrufe.Ein Funktionsaufruf hat einen Funktionsnamen, der mit dem Muster [A-za-z] [A-Za-z0-9 _] * übereinstimmt, gefolgt von einer öffnenden Klammer, null oder mehr Parametern und einer schließenden Klammer. Parameter werden durch ein Semikolon (kein Komma) getrennt, obwohl Leser optional auch Funktionsaufrufe mit Kommas als Trennzeichen akzeptieren KÖNNEN. Bei Funktionsnamen wird die Groß- und Kleinschreibung nicht beachtet, daher sind „sum“ und „SUM“ dieselbe Funktion. Wenn es Parameter gibt, muss jeder Ausdruck ein Ausdruck sein und keiner kann leer sein. Daher ist X (;) kein zulässiger Funktionsaufruf, während RAND () vollkommen zulässig ist. Wenn ein Parameter optional ist, KANN er weggelassen werden, aber wenn er weggelassen wird, MUSS auch sein Trennzeichen weggelassen werden (Funktionsspezifikationen sollten angeben, welche Parameter optional sind und was das Weglassen bedeutet). Typische Implementierungen werden viele eingebaute Funktionen haben, Die meisten Implementierungen unterstützen auch eine oder mehrere Möglichkeiten zum Erstellen benutzerdefinierter Funktionen. Zu den allgemeinen Funktionen gehören:

  • SUM ( Liste ) - fasst alle Zahlen im Bereich der Liste zusammen .
  • COUNT ( Liste ) - Zählt die Anzahl der Nummern im Bereich der Liste
  • AVERAGE ( Liste ) - Berechnet den Durchschnitt gleich SUM ( Liste ) / COUNT ( Liste )
  • MIN ( Liste ) - numerischer Mindestwert der Liste
  • MAX ( Liste ) - Maximaler Wert der Liste
  • ROUND ( n , count ) - Runde n, um die Ziffern zu zählen (wenn count weggelassen wird, count = 0)
  • INT ( n ) - rundet n auf die nächste ganze Zahl ab.
  • ISEVEN ( n ) - gibt TRUE () zurück, wenn n gerade ist, andernfalls wird FALSE () zurückgegeben.
  • WECHSELN ( Text ; Suchtext ; newtext ; Auftreten ) - Ersatz Newtext für den Suchtext in Text , Vorkommen Anzahl , wie oft (wenn Auftreten weggelassen, alle Zeiten).

Adressen von Zellen, die Zahlen enthalten . Die Adressen können relativ oder absolut sein. Eine relative Adresse besteht aus einem Spaltenbuchstaben und einer Zeilennummer. Das Präfixieren des Zeilenbuchstabens oder der Spaltennummer mit einem $macht die Zeile oder Spalte absolut.

Leerzeichen (Leerzeichen, Tabulator, Zeilenvorschub und Zeilenumbruch) werden in der Standardformelsyntax ignoriert, mit Ausnahme des Inhalts von Zeichenfolgenkonstanten und als Trennzeichen für mehrere Zellbereichsadressen in einer Zellbereichsadressliste.

Benutzerschnittstellen von Implementierungen KÖNNEN sich dafür entscheiden, Formeln zu akzeptieren und anzuzeigen, die sich vom Austausch in diesem Datenformat unterscheiden. Beispielsweise KÖNNEN sie Zahlen im Format des aktuellen Gebietsschemas akzeptieren und anzeigen, KÖNNEN immer ein bestimmtes Gebietsschema für numerische Formate verwenden, KÖNNEN Kommas anstelle von Semikolons für Parametertrennzeichen verwenden und KÖNNEN Zellenadressen akzeptieren und anzeigen, ohne dass das erforderlich ist Verwendung von eckigen Klammern. Implementierungsbenutzeroberflächen MÜSSEN jedoch auch das Standardformat als Eingabe akzeptieren, z. B. MÜSSEN Implementierungen Zahlen akzeptieren, die die Anforderungen des Gebietsschemas „C“ (sowie die aktuellen Gebietsschemas) erfüllen, und MÜSSEN Adressen in Klammern akzeptieren. Außerdem MÜSSEN Benutzeroberflächen für die Implementierung wahrscheinliche Fehler korrigieren, möglicherweise mit einem Dialog. Beispielsweise,

Das Folgende ist ein Beispiel für eine einfache Formel:

=sum(A1:A5)

Diese Formel berechnet die Summe der Werte aller Zellen im Bereich „.A1: .A5“. Die Funktion ist "Summe". Die Parameter sind am Anfang mit einem "(" und am Ende mit einem ")" gekennzeichnet. Wenn eine Funktion mehr als einen Parameter enthält, werden die Parameter durch ein ";" getrennt. Das Folgende ist eine Variation der oben gezeigten Formel:

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

Das Ergebnis dieser Formel ist das gleiche. Die Komponenten, die Sie in der Formel verwenden, hängen von der von Ihnen verwendeten Anwendung ab.

Rog
quelle
Tolle Antwort, @rog. Haben Sie eine Idee, warum in der Google-Funktionsdokumentation Kommas anstelle von Semikolons zum Trennen von Parametern verwendet werden? Sie funktionieren in keinem meiner Tests.
Jpsy
@Jpsy: Das Parametertrennzeichen hängt von den Einstellungen der Tabelle ab. Semikolon wird verwendet, wenn Komma das Dezimaltrennzeichen ist.
Rubén
"Implementierungen von AND (), OR () und IF () müssen kurzschließen" --- Leider ist dies zum Zeitpunkt des Schreibens in Google Spreadsheets noch nicht bekannt. Ich habe versucht "AND (FALSE, ein Ausdruck mit Typenkonflikt)", und anstatt den zweiten Teil zu ignorieren, ist das Ergebnis ein Fehler des zweiten Operanden. Zum Glück gibt es eine Problemumgehung für stackoverflow: stackoverflow.com/a/16926642/2184166
ob-ivan
6

Nachdem ich mich ein wenig umgesehen habe, finde ich das

  1. Google-Tabellenkalkulationsformeln implementieren einen De-facto- Standard , der Microsoft Excel und anderen folgt.
  2. Der Standard scheint nie richtig definiert worden zu sein .

Das, was ich einer umfassenden Definition am nächsten fand, war in diesem alten Mailinglisten-Beitrag: http://lists.oasis-open.org/archives/office-comment/200411/msg00000.html , der eine Yacc-Grammatik und einen Lex-Tokenizer enthält. und eine kurze Beschreibung der Semantik.

Es ist nicht klar, inwieweit dies der Implementierung von Google Spreadsheet entspricht - einige Beispiele funktionieren in Google Spreadsheets nicht.

Dies scheint ein trauriger Zustand zu sein. Jeder Fortschritt in Bezug auf diese Informationen wäre sehr dankbar.

Rog
quelle
Seit dem obigen Beitrag wurden große Fortschritte erzielt. Bezüglich OpenDocument siehe die Ankündigungen auf 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

David Hoepelmans Masterarbeit "Tool-assisted Spreadsheet Refactoring und Parsing von Spreadsheet-Formeln" (Delft University of Technology) ist die mit Abstand beste Beschreibung der Spreadsheet-Formelsyntax, die ich je gesehen habe. BNFs, empirische Validierung und alle Zutaten. Einfach genug, um ein guter Leitfaden für handcodierte Projekte zu sein. XLParser ist das begleitende GitHub-Open-Source-Projekt, auf das in der Arbeit verwiesen wird.

Leider ist es für Excel keine Tabellen, aber in dem Maße, in dem Tabellenformeln Excel-kompatibel sind, ist es ein guter Anfang.

Humbertcopperfield
quelle