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:F
para referirme a la F
columna 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í.
Respuestas:
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):
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:
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:
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.
fuente
Después de buscar un poco más, encuentro que
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.
fuente
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.
fuente