Documentation de référence complète pour les formules Google Spreadsheets?

21

En tant que programmeur, je me sens un peu frustré lorsque j'essaie d'utiliser des feuilles de calcul Google, car il ne semble pas y avoir de description définitive de la syntaxe que je peux utiliser pour les formules. Par exemple, j'ai lu que je peux utiliser F3:Fpour faire référence à la Fcolonne de la ligne 3 vers le bas, mais je ne trouve pas où cela mentionne cela dans la documentation de référence de Google, et cela ne semble pas toujours fonctionner. Je me trompe probablement, mais c'est le point de cette question.

Je ne veux pas parcourir cinq tutoriels différents pour essayer de deviner les règles! Existe-t-il une description concise de la grammaire et de la sémantique disponibles quelque part? Sinon, quelqu'un pourrait peut-être le résumer ici.

rog
la source
docs.google.com/support/bin/… Je ne sais pas si cela vous sera utile (c'est pourquoi il est préférable de commenter :))
Matt
1
merci, c'est une partie utile de l'image, mais pourquoi ne peuvent-ils pas documenter le tout?!
rog
Aucun problème, aucune idée pourquoi ils ne le font pas, mais c'est assez similaire à execl et il n'y a que quelques changements de syntaxe. Si vous êtes toujours coincé, vous pouvez toujours demander ici :)
Matt

Réponses:

11

Ceci est un texte extrait d' ici . Je l'ai posté ici comme un homme de paille. Si quelqu'un qui sait en quoi cela diffère des formules dans les feuilles de calcul Google pourrait faire un commentaire, nous pourrions peut-être nous retrouver avec une bonne réponse.

Formules

Les formules vous permettent d'effectuer des calculs dans les cellules du tableau. Chaque formule PEUT commencer par un préfixe d'espace de nom spécifiant la syntaxe et la sémantique utilisées dans la formule. Lorsqu'il n'y a pas de préfixe, la syntaxe et la sémantique de formule par défaut décrites ci-dessous sont utilisées. Ceci est suivi d'un signe égal, puis de la formule elle-même. Les implémentations PEUVENT accepter plusieurs syntaxes de formule, et elles PEUVENT accepter diverses extensions de la syntaxe de formule par défaut. Cependant, toutes les implémentations qui acceptent les formules DOIVENT accepter la syntaxe et la sémantique des formules par défaut, comme décrit ici. Ils PEUVENT également accepter des extensions.

Un document implémentant le schéma strict NE PEUT PAS utiliser un préfixe d'espace de nom de formule (car il n'y a aucune garantie que d'autres systèmes récepteurs seraient en mesure de le traiter), et NE PEUT PAS utiliser les extensions de la sémantique et de la syntaxe décrites ci-dessous: Dans la formule par défaut syntaxe, après le signe égal initial, une formule doit être une expression. Une expression peut être un nombre, une chaîne constante, une plage nommée, une paire d'expressions connectées par un opérateur binaire, une expression préfixée par un opérateur unaire, un opérateur logique, un appel de fonction, une adresse de cellule ou une expression entourée de parenthèses. Un appel de fonction et un opérateur logique peuvent avoir zéro ou plusieurs paramètres séparés par des points-virgules, et chaque paramètre DOIT être une expression. La syntaxe de chacun d'eux est la suivante:

  • Nombres. Les nombres sont écrits et lus dans ce format en utilisant les paramètres régionaux "C" (en utilisant le séparateur décimal "." Et aucun séparateur de milliers), en utilisant setlocale (LC_NUMERIC, "C") ou équivalent. Les nombres peuvent se terminer par%, ce qui divise ce nombre par 100. Le «%» ne change pas la signification des autres opérateurs, donc 2 + 10% est 2,1 (et non 2,2). Notez que les signes - et + sont autorisés comme opérateurs unaires, décrits ci-dessous. Les auteurs DOIVENT écrire des nombres qui correspondent au modèle (notez qu'il doit commencer par un chiffre): [0-9] + (. [0-9] +)? ([EE] [+ -]? [0-9] + )?%? Les lecteurs DOIVENT être capables de lire ces nombres, ainsi que d'accepter les nombres qui commencent par un ".", Donc ils doivent être capables de lire les nombres sous la forme: ((. [0-9] +) | ([0- 9] + (. [0-9] +)? ([EE] [+ -]? [0-9] +)?))%? Chaînes constantes .. Les chaînes constantes sont entourées de guillemets doubles; pour intégrer un guillemet double, le caractère guillemet double est utilisé deux fois. Les chaînes sont stockées au format UTF-8. Notez que puisque tout le contenu est stocké en XML, tous les guillemets doubles dans la formule sont en fait stockés en tant que "dans le XML. Les chaînes constantes correspondent au modèle: \" ([^ "] | \" \ ") * \"

  • Plages / champs nommés. Les plages / champs nommés font référence à une valeur définie distincte ou à un ensemble de valeurs (dans une feuille de calcul, faisant généralement référence à une adresse de cellule ou à un ensemble d'adresses). Les noms ne sont pas sensibles à la casse, donc "a" et "A" se réfèrent à la même plage. Les implémentations doivent accepter au moins des plages nommées qui correspondent au modèle suivant: [A-Za-z] [A-Za-z0-9 _] *

  • Les opérateurs. Les opérateurs d'infixe et de préfixe ordinaires sont acceptés. Celles-ci ont l'associativité et la priorité suivantes (de la plus basse à la plus haute priorité):

Opérateur (s) d'associativité Commentaires
gauche <, =,>, <=,> =, <> Inférieur à, égal à, supérieur à,
                                     inférieur ou égal à, supérieur ou égal à,
                                     pas égal à.
gauche +, -, & Ajouter, soustraire, concaténation de chaîne. Notez que
                                     unaire (préfixe) + et - a une priorité différente.
gauche *, / Multiplier, diviser. La division ne tronque pas, donc
                                     1/2 est égal à 0,5.
droite ^ Puissance (2 ^ 3 est 8). Les lecteurs DEVRAIENT également accepter «**».
none +, - Préfixez les opérateurs unaires, par exemple, -5 ou - [. A1].
                                     Notez que ceux-ci ont une priorité différente de celle
                                     ajouter et soustraire.

La priorité peut être remplacée en utilisant des parenthèses, donc "= 2 + 3 * 4" calcule 14 tandis que "= (2 + 3) * 4" calcule 20. Notez que +, -, *, /, ^ convertissent n'importe quelle chaîne ou valeur binaire ils utilisent en nombres avant de calculer; notez que & (concaténation de chaînes) convertit toutes les valeurs en chaînes avant de les concaténer. Opérateurs logiques. Les opérateurs logiques ont la même syntaxe que les appels de fonction; leurs noms ne respectent pas la casse, les paramètres sont séparés par des points-virgules et leur nom DOIT être suivi de parenthèses. Les opérateurs logiques sont:


Opérateur Nombre de paramètres Commentaire
TRUE () 0 Il s'agit d'une constante booléenne, bien que sa syntaxe la fasse apparaître comme une fonction
FALSE () 0 Ceci est une constante booléenne
NOT (expression) 1 Si l'expression est TRUE () renvoie FALSE (), sinon renvoie TRUE ()
AND (e1; e2 [; e] *) 2 ou plus Si toutes les expressions sont TRUE () renvoie TRUE (), sinon renvoie FALSE ()
OU (e1; e2 [; e] *) 2 ou plus Si toutes les expressions sont FALSE () renvoie FALSE (), sinon renvoie TRUE ()
IF (condition; true_exp; false_exp)
                   3 Évalue l'état. Si c'est vrai, retournez true_exp, sinon retournez false_exp

Les implémentations de AND (), OR () et IF () doivent court-circuiter, c'est-à-dire qu'elles doivent évaluer tour à tour de gauche à droite et n'évaluer que les expressions qu'elles doivent évaluer pour calculer le résultat. Une implémentation peut choisir d'évaluer davantage, mais uniquement lorsque les expressions n'ont aucun effet secondaire. Les implémentations de AND () et OR () DEVRAIENT accepter un nombre arbitraire de paramètres, mais DOIVENT en accepter au moins 30 à chaque utilisation. Les opérations NOT (), AND () et OR (), ainsi que la condition dans IF (), sont destinées aux valeurs booléennes; si des expressions d'autres types sont utilisées, une implémentation NE DEVRAIT PAS considérer 0 comme faux et toute autre valeur numérique comme vraie, et NE DEVRAIT PAS considérer une chaîne de longueur nulle comme fausse et toute autre valeur de chaîne comme vraie. Si une valeur d'erreur est calculée pour une expression, cette première erreur est le résultat de l'opération logique.


Appels de fonction.Un appel de fonction a un nom de fonction correspondant au modèle [A-za-z] [A-Za-z0-9 _] * suivi d'une parenthèse ouvrante, de zéro ou plusieurs paramètres et d'une parenthèse fermante. Les paramètres sont séparés par un point-virgule (pas une virgule), bien que les lecteurs PEUVENT éventuellement accepter les appels de fonction en utilisant des virgules comme séparateurs. Les noms de fonction ne sont pas sensibles à la casse, donc «sum» et «SUM» sont la même fonction. S'il y a des paramètres, chacun doit être une expression et aucun ne peut être vide, donc X (;) n'est pas un appel de fonction légal tandis que RAND () est parfaitement légal. Si un paramètre est facultatif, il PEUT être omis, mais s'il est omis, son séparateur DOIT également être omis (les spécifications de la fonction doivent indiquer quels paramètres sont facultatifs et ce que leur omission signifie). Les implémentations typiques auront de nombreuses fonctions intégrées, et la plupart des implémentations prennent également en charge une ou plusieurs façons de créer des fonctions définies par l'utilisateur. Les fonctions communes incluent:

  • SUM ( list ) - résume tous les nombres dans la ou les plages de la liste .
  • COUNT ( liste ) - compte le nombre de nombres dans la ou les plages de la liste
  • MOYENNE ( liste ) - Calcule la moyenne, égale à SUM ( liste ) / COUNT ( liste )
  • MIN ( liste ) - valeur numérique minimale de la liste
  • MAX ( liste ) - valeur maximale de la liste
  • ROUND ( n , count ) - arrondir n pour compter les chiffres (si count omis, count = 0)
  • INT ( n ) - arrondit n à l'entier le plus proche.
  • ISEVEN ( n ) - retourne TRUE () si n est pair, sinon retourne FALSE ().
  • REMPLACER ( texte , searchtext ; newText ; occurrence ) - substituts Newtext pour searchtext en texte , occurrence nombre de fois (si occurrence omis, en tout temps).

Adresses de cellules contenant des nombres . Les adresses peuvent être relatives ou absolues. Une adresse relative se compose d'une lettre de colonne et d'un numéro de ligne. Préfixer la lettre de ligne ou le numéro de colonne avec un $rend la ligne ou la colonne absolue.

Les espaces (espace, tabulation, retour à la ligne et retour chariot) sont ignorés dans la syntaxe des formules par défaut, sauf dans le contenu des constantes de chaîne et comme séparateur pour plusieurs adresses de plage de cellules dans une liste d'adresses de plage de cellules.

Les interfaces utilisateur des implémentations PEUVENT choisir d'accepter et d'afficher les formules différemment de la façon dont elles sont échangées dans ce format de données. Par exemple, ils PEUVENT accepter et afficher des nombres en utilisant le format des paramètres régionaux actuels, ils PEUVENT toujours utiliser un paramètre régional particulier pour les formats numériques, ils PEUVENT utiliser des virgules au lieu de points-virgules pour les séparateurs de paramètres, et ils PEUVENT accepter et afficher les adresses de cellule sans nécessiter la utilisation de crochets. Mais les interfaces utilisateur d'implémentation DEVRAIENT accepter le format par défaut en entrée aussi bien que possible, par exemple, les implémentations DEVRAIENT accepter les nombres qui répondent aux exigences locales «C» (ainsi que les paramètres régionaux actuels), et DEVRAIENT accepter les adresses de cellules entre crochets. De plus, les interfaces utilisateur de mise en œuvre DEVRAIENT corriger les erreurs probables, éventuellement avec un dialogue. Par exemple,

Voici un exemple de formule simple:

=sum(A1:A5)

Cette formule calcule la somme des valeurs de toutes les cellules de la plage «.A1: .A5». La fonction est «somme». Les paramètres sont marqués d'un «(« au début et d'un «)» à la fin. Si une fonction contient plusieurs paramètres, les paramètres sont séparés par un «;». Voici une variante de la formule ci-dessus:

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

Le résultat de cette formule est le même. Les composants que vous utilisez dans la formule dépendent de l'application que vous utilisez.

rog
la source
Excellente réponse, @rog. Savez-vous pourquoi la documentation de la fonction Google utilise des virgules au lieu de points-virgules pour séparer les paramètres? Ils ne fonctionnent dans aucun de mes tests.
Jpsy
@Jpsy: Le séparateur de paramètres dépend des paramètres de la feuille de calcul. Le point-virgule est utilisé lorsque la virgule est le séparateur de décimales.
Rubén
"Les implémentations de AND (), OR () et IF () doivent court-circuiter" --- malheureusement, je n'ai pas cela dans Google Spreadsheets au moment de la rédaction de cet article. J'ai essayé "ET (FAUX, une expression avec une incompatibilité de type)", et au lieu d'ignorer la deuxième partie, le résultat est une erreur du deuxième opérande. Heureusement, il existe une solution de contournement sur stackoverflow: stackoverflow.com/a/16926642/2184166
ob-ivan
6

Après avoir cherché un peu plus, je trouve que

  1. Les formules de feuille de calcul Google implémentent une norme de facto , à la suite de Microsoft Excel et d'autres.
  2. La norme semble n'avoir jamais été définie correctement .

Le plus proche que j'ai trouvé d'une définition complète était dans cet ancien poste de liste de diffusion: http://lists.oasis-open.org/archives/office-comment/200411/msg00000.html , qui contient une grammaire yacc, un tokenizer lex, et une brève description de la sémantique.

Il n'est pas clair à quel point cela correspond à la mise en œuvre de Google Spreadsheet - plusieurs exemples ne fonctionnent pas dans Google Spreadsheets.

Cela semble une situation déplorable. Toute avancée sur ces informations serait très appréciée.

rog
la source
Il y a eu beaucoup de progrès depuis le post ci-dessus. Concernant OpenDocument voir les annonces
Rubén
-2

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

La thèse de maîtrise de David Hoepelman "Refactorisation assistée par outil et analyse des formules de feuille de calcul" (Delft University of Technology) est de loin la meilleure description de la syntaxe des formules de feuille de calcul que j'ai vue. BNF, validation empirique et tous les réglages. Pourtant, assez simple pour être un bon guide pour les projets codés à la main. XLParser est le projet open source compagnon GitHub référencé dans la thèse.

Hélas, il s'agit d'Excel et non de feuilles, mais dans la mesure où les formules de feuilles sont compatibles avec Excel, c'est un excellent point de départ.

Humbertcopperfield
la source