¿Documentación de referencia completa para las fórmulas de hojas de cálculo de Google?

21

Como programador, me siento algo frustrado cuando intento usar las hojas de cálculo de Google, porque parece que no hay una descripción definitiva de la sintaxis que puedo usar para las fórmulas. Por ejemplo, he leído que puedo usar F3:Fpara referirme a la Fcolumna desde la fila 3 hacia abajo, pero no puedo encontrar dónde menciona esto en la documentación de referencia de Google, y no siempre parece funcionar. Probablemente lo estoy haciendo mal, pero ese es el punto de esta pregunta.

¡No quiero rastrear cinco tutoriales diferentes para tratar de adivinar las reglas! ¿Existe una descripción concisa de la gramática y la semántica disponible en alguna parte? Si no, tal vez alguien podría resumirlo aquí.

rog
fuente
docs.google.com/support/bin/… No sé si esto será de alguna ayuda (es por eso que es solo un comentario :))
Matt
1
gracias, esa es una parte útil de la imagen, pero ¿por qué no pueden documentar todo?
rog
No hay problema, no tengo idea de por qué no lo hacen, pero es bastante similar a execl y solo hay unos pocos cambios de sintaxis. Si alguna vez te quedaste, siempre puedes preguntar aquí :)
Matt

Respuestas:

11

Este es un texto extraído de aquí . Lo publiqué aquí como un hombre de paja. Si alguien que sabe cómo esto difiere de las fórmulas en las Hojas de cálculo de Google podría hacer un comentario, entonces quizás podamos terminar con una buena respuesta.

Fórmulas

Las fórmulas le permiten realizar cálculos dentro de las celdas de la tabla. Cada fórmula PUEDE comenzar con un prefijo de espacio de nombres que especifica la sintaxis y la semántica utilizada dentro de la fórmula. Cuando no hay prefijo, se utilizan la sintaxis y la semántica de fórmula predeterminadas como se describe a continuación. Esto es seguido por un signo igual y luego la fórmula misma. Las implementaciones PUEDEN aceptar múltiples sintaxis de fórmulas, y PUEDEN aceptar varias extensiones de la sintaxis de fórmulas predeterminada. Sin embargo, todas las implementaciones que aceptan fórmulas DEBEN aceptar la sintaxis y la semántica de fórmula predeterminada como se describe aquí. También PUEDEN aceptar extensiones a la misma.

Un documento que implementa el esquema estricto NO PUEDE usar un prefijo de espacio de nombres de fórmula (ya que no hay garantía de que otros sistemas receptores puedan procesarlo), y NO PUEDE usar ninguna extensión de la semántica y la sintaxis descritas a continuación .: En la fórmula predeterminada sintaxis, después del signo igual inicial, una fórmula debe ser una expresión. Una expresión puede ser un número, una cadena constante, un rango con nombre, un par de expresiones conectadas por un operador binario, una expresión prefijada por un operador unario, un operador lógico, una llamada de función, una dirección de celda o una expresión rodeada por paréntesis Una llamada a función y un operador lógico pueden tener cero o más parámetros separados por punto y coma, y ​​cada parámetro DEBE ser una expresión. La sintaxis para cada uno de estos es la siguiente:

  • Números. Los números se escriben y leen en este formato usando la configuración regional "C" (usando el separador decimal "." Y sin separador de miles), usando setlocale (LC_NUMERIC, "C") o equivalente. Los números pueden terminar en%, lo que divide ese número entre 100. El "%" no cambia el significado de otros operadores, por lo que 2 + 10% es 2.1 (no 2.2). Tenga en cuenta que los signos iniciales - y + están permitidos como operadores unarios, que se describen a continuación. Los escritores DEBEN escribir números que coincidan con el patrón (tenga en cuenta que debe comenzar con un dígito): [0-9] + (. [0-9] +)? ([EE] [+ -]? [0-9] + )?%? Los lectores DEBEN poder leer estos números, así como aceptar números que comiencen con un "." Inicial, por lo que deben poder leer los números en la forma: ((. [0-9] +) | ([0- 9] + (. [0-9] +)? ([EE] [+ -]? [0-9] +)?))%? Cadenas constantes. Las cadenas constantes están entre comillas dobles; para incrustar una comilla doble, el carácter de comillas dobles se usa dos veces. Las cadenas se almacenan en formato UTF-8. Tenga en cuenta que dado que todo el contenido se almacena como XML, todas las comillas dobles en la fórmula se almacenan realmente como "en el XML. Las cadenas constantes coinciden con el patrón: \" ([^ "] | \" \ ") * \"

  • Rangos / campos nombrados. Los rangos / campos con nombre se refieren a un valor definido separado o un conjunto de valores (en una hoja de cálculo, que generalmente se refiere a una dirección de celda o conjunto de direcciones). Los nombres no distinguen entre mayúsculas y minúsculas, por lo que "a" y "A" se refieren al mismo rango. Las implementaciones deben aceptar al menos rangos con nombre que coincidan con el siguiente patrón: [A-Za-z] [A-Za-z0-9 _] *

  • Operadores Se aceptan operadores de prefijo y prefijo ordinarios. Estos tienen la siguiente asociatividad y precedencia (de menor a mayor prioridad):

Operador (s) de asociatividad Comentarios
izquierda <, =,>, <=,> =, <> Menor que, igual que, mayor que,
                                     menor o igual que, mayor o igual que,
                                     no igual a.
izquierda +, -, y Agregar, restar, concatenación de cadenas. Tenga en cuenta que
                                     unario (prefijo) + y - tiene una prioridad diferente.
izquierda *, / Multiplicar, dividir. La división no se trunca, entonces
                                     1/2 es igual a 0.5.
derecha ^ Potencia (2 ^ 3 es 8). Los lectores también DEBEN aceptar "**".
none +, - Prefijar operadores unarios, por ejemplo, -5 o - [. A1].
                                     Tenga en cuenta que estos tienen una precedencia diferente a
                                     sumar y restar.

La precedencia puede anularse usando paréntesis, por lo que "= 2 + 3 * 4" calcula 14 mientras que "= (2 + 3) * 4" calcula 20. Tenga en cuenta que +, -, *, /, ^ convierten cualquier cadena o valor binario se usan en números antes de computar; tenga en cuenta que & (concatenación de cadenas) convierte cualquier valor en cadenas antes de concatenarlas. Operadores lógicos. Los operadores lógicos tienen la misma sintaxis que las llamadas a funciones; sus nombres no distinguen entre mayúsculas y minúsculas, los parámetros están separados por punto y coma, y ​​su nombre DEBE ir seguido de paréntesis. Los operadores lógicos son:


Operador Recuento de parámetros Comentario
TRUE () 0 Esta es una constante booleana, aunque su sintaxis hace que parezca una función
FALSO () 0 Esta es una constante booleana
NOT (expresión) 1 Si la expresión es VERDADERO () devuelve FALSO (), de lo contrario devuelve VERDADERO ()
AND (e1; e2 [; e] *) 2 o más Si todas las expresiones son TRUE () devuelve TRUE (), de lo contrario devuelve FALSE ()
O (e1; e2 [; e] *) 2 o más Si todas las expresiones son FALSE () devuelve FALSE (), de lo contrario devuelve TRUE ()
IF (condición; true_exp; false_exp)
                   3 Evalúa la condición. Si es cierto, devuelve true_exp, de lo contrario, devuelve false_exp

Las implementaciones de AND (), OR () e IF () deben cortocircuitar, es decir, deben evaluar de izquierda a derecha y solo evaluar las expresiones que deben evaluar para calcular el resultado. Una implementación puede elegir evaluar más, pero solo cuando las expresiones no tienen efectos secundarios. Las implementaciones de AND () y OR () DEBEN aceptar un número arbitrario de parámetros, pero DEBEN aceptar al menos 30 en cada uso. Las operaciones NOT (), AND () y OR (), así como la condición en IF (), están destinadas a valores booleanos; si se usan expresiones de otros tipos, una implementación NO DEBE considerar 0 como falso y cualquier otro valor numérico como verdadero, y NO DEBE considerar una cadena de longitud cero como falsa y cualquier otro valor de cadena como verdadero. Si se calcula un valor de error para una expresión, ese primer error es el resultado de la operación lógica.


Llamadas a funciones.Una llamada a función tiene un nombre de función que coincide con el patrón [A-za-z] [A-Za-z0-9 _] * seguido de un paréntesis de apertura, cero o más parámetros y un paréntesis de cierre. Los parámetros están separados por un punto y coma (no una coma), aunque los lectores PUEDEN aceptar opcionalmente llamadas a funciones utilizando comas también como separadores. Los nombres de las funciones no distinguen entre mayúsculas y minúsculas, por lo que "suma" y "SUMA" son la misma función. Si hay parámetros, cada uno debe ser una expresión y ninguno puede estar vacío, por lo que X (;) no es una llamada de función legal mientras RAND () es perfectamente legal. Si un parámetro es opcional, PUEDE omitirse, pero si se omite, su separador DEBE omitirse también (las especificaciones de la función deben indicar qué parámetros son opcionales y qué significa omitirlos). Las implementaciones típicas tendrán muchas funciones integradas, y la mayoría de las implementaciones también admiten una o más formas de crear funciones definidas por el usuario. Las funciones comunes incluyen:

  • SUMA ( lista ): resume todos los números en el rango (s) de la lista .
  • COUNT ( lista ): cuenta el número de números en el rango (s) de la lista
  • PROMEDIO ( lista ): calcula el promedio, igual a SUMA ( lista ) / COUNT ( lista )
  • MIN ( lista ): valor numérico mínimo de la lista
  • MAX ( lista ) - valor máximo de la lista
  • ROUND ( n , contar ) - redonda n a contar dígitos (si el recuento omite, contar = 0)
  • INT ( n ): redondea n hacia abajo al entero más cercano.
  • ISEVEN ( n ): devuelve TRUE () si n es par; de lo contrario, devuelve FALSE ().
  • SUSTITUTO ( texto ; searchText ; newText ; ocurrencia ) - sustitutos newText para searchText en el texto , ocurrencia número de veces (si ocurrencia se omite, todas las veces).

Direcciones de celdas que contienen números . Las direcciones pueden ser relativas o absolutas. Una dirección relativa consiste en una letra de columna y un número de fila. Prefijar la letra de la fila o el número de columna con a $hace que la fila o columna sea absoluta.

El espacio en blanco (espacio, tabulación, nueva línea y retorno de carro) se ignora en la sintaxis predeterminada de las fórmulas, excepto en el contenido de las constantes de cadena y como un separador para múltiples direcciones de rango de celdas en una lista de direcciones de rango de celdas.

Las interfaces de usuario de las implementaciones PUEDEN optar por aceptar y mostrar fórmulas de forma diferente a cómo se intercambian en este formato de datos. Por ejemplo, PUEDEN aceptar y mostrar números usando el formato de la localización actual, PUEDEN usar siempre una localización particular para formatos numéricos, PUEDEN usar comas en lugar de punto y coma para los separadores de parámetros, y PUEDEN aceptar y mostrar direcciones de celda sin requerir el uso de corchetes. Pero las interfaces de usuario de implementación DEBERÍAN aceptar el formato predeterminado como entrada también cuando sea posible, por ejemplo, las implementaciones DEBERÍAN aceptar números que cumplan con los requisitos locales de "C" (así como los locales actuales), y DEBERÍAN aceptar direcciones de celdas entre corchetes. Además, las interfaces de usuario de implementación DEBEN corregir los posibles errores, posiblemente con un diálogo. Por ejemplo,

El siguiente es un ejemplo de una fórmula simple:

=sum(A1:A5)

Esta fórmula calcula la suma de los valores de todas las celdas en el rango ".A1: .A5". La función es "suma". Los parámetros están marcados con un "(" al principio y un ")" al final. Si una función contiene más de un parámetro, los parámetros están separados por un ";". La siguiente es una variación de la fórmula que se muestra arriba:

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

El resultado de esta fórmula es el mismo. Los componentes que usa en la fórmula dependen de la aplicación que esté usando.

rog
fuente
Gran respuesta, @rog. ¿Tiene alguna idea de por qué la documentación de la función de Google usa comas en lugar de punto y coma para separar los parámetros? No funcionan en ninguna de mis pruebas.
Jpsy
@Jpsy: el separador de parámetros depende de la configuración de la hoja de cálculo. El punto y coma se usa cuando la coma es el separador de decimales.
Rubén
"Las implementaciones de AND (), OR () e IF () deben causar un cortocircuito" --- desafortunadamente no entiendo esto en las hojas de cálculo de Google al momento de escribir esto. Traté de "Y (FALSO, una expresión con tipo no coincidente)", y en lugar de ignorar la segunda parte, el resultado es un error del segundo operando. Afortunadamente, hay una solución alternativa en stackoverflow: stackoverflow.com/a/16926642/2184166
ob-ivan
6

Después de buscar un poco más, encuentro que

  1. Las fórmulas de hoja de cálculo de Google implementan un estándar de facto , siguiendo a Microsoft Excel y otros.
  2. El estándar parece que nunca se ha definido correctamente .

Lo más cercano que encontré a una definición completa fue en esta vieja publicación de la lista de correo: http://lists.oasis-open.org/archives/office-comment/200411/msg00000.html , que contiene una gramática de yacc, un tokenizer lex, y una breve descripción de la semántica.

No está claro hasta qué punto esto corresponde a la implementación de la hoja de cálculo de Google; varios ejemplos no funcionan en las hojas de cálculo de Google.

Esto parece un lamentable estado de cosas. Cualquier avance en esta información sería muy apreciado.

rog
fuente
Hubo mucho progreso desde la publicación anterior. Con respecto a OpenDocument, vea los anuncios
Rubén
-2

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

La tesis de maestría de David Hoepelman "refactorización y análisis de fórmulas de hoja de cálculo asistida por herramientas" (Delft University of Technology) es, con mucho, la mejor descripción de la sintaxis de fórmulas de hoja de cálculo que he visto. BNF, validación empírica y todos los recortes. Sin embargo, es lo suficientemente simple como para ser una buena guía para proyectos codificados a mano. XLParser es el proyecto de código abierto complementario de GitHub al que se hace referencia en la tesis.

Por desgracia, es para Excel, no para las hojas, pero en la medida en que las fórmulas de las hojas son compatibles con Excel, es un excelente lugar para comenzar.

Humbertcopperfield
fuente