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:F
die F
Spalte 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.
Antworten:
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):
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:
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:
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.
quelle
Nachdem ich mich ein wenig umgesehen habe, finde ich das
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.
quelle
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.
quelle