Como programador, fico um pouco frustrado ao tentar usar as Planilhas do Google, porque parece não haver uma descrição definitiva da sintaxe que posso usar para fórmulas. Por exemplo, eu li que posso usar F3:F
para me referir à F
coluna da linha 3 para baixo, mas não consigo encontrar onde ela menciona isso na documentação de referência do Google e nem sempre parece funcionar. Provavelmente estou fazendo errado, mas esse é o ponto desta pergunta.
Não quero percorrer cinco tutoriais diferentes para tentar adivinhar as regras! Existe uma descrição concisa da gramática e semântica disponível em algum lugar? Caso contrário, talvez alguém possa resumir aqui.
Respostas:
Este é um texto extraído daqui . Eu publiquei aqui como um homem de palha. Se alguém que sabe como isso difere das fórmulas nas planilhas do Google pode fazer um comentário, talvez possamos terminar com uma boa resposta.
Fórmulas
As fórmulas permitem realizar cálculos nas células da tabela. Toda fórmula PODE começar com um prefixo de espaço para nome, especificando a sintaxe e a semântica usadas na fórmula. Quando não há prefixo, são utilizadas a sintaxe e a semântica padrão da fórmula, conforme descrito abaixo. Isto é seguido por um sinal de igual e depois pela própria fórmula. Implementações podem aceitar várias sintaxes da fórmula, e eles podem aceitar várias extensões para a sintaxe da fórmula padrão. No entanto, todas as implementações que aceitam fórmulas DEVEM aceitar a sintaxe padrão da fórmula e a semântica, conforme descrito aqui. Eles também podem aceitar extensões para ele.
Um documento que implementa o esquema estrito NÃO PODE usar um prefixo de espaço para nome da fórmula (já que não há garantia de que outros sistemas receptores possam processá-lo) e NÃO PODE usar nenhuma extensão para a semântica e sintaxe descritas abaixo: Na fórmula padrão sintaxe, após o sinal de igual inicial, uma fórmula deve ser uma expressão. Uma expressão pode ser um número, uma cadeia constante, um intervalo nomeado, um par de expressões conectadas por um operador binário, uma expressão prefixada por um operador unário, um operador lógico, uma chamada de função, um endereço de célula ou uma expressão cercada por parênteses. Uma chamada de função e um operador lógico podem ter zero ou mais parâmetros separados por ponto e vírgula, e cada parâmetro DEVE ser uma expressão. A sintaxe para cada um deles é a seguinte:
Números. Os números são gravados e lidos nesse formato usando o código de idioma "C" (usando o separador decimal "." E sem separador de milhares), usando setlocale (LC_NUMERIC, "C") ou equivalente. Os números podem terminar em%, que divide esse número por 100. O "%" não altera o significado de outros operadores, portanto 2 + 10% é 2,1 (não 2,2). Observe que os sinais - e + iniciais são permitidos como operadores unários, descritos abaixo. Os escritores DEVEM escrever números que correspondam ao padrão (observe que ele deve começar com um dígito): [0-9] + (. [0-9] +)? ([EE] [+ -]? [0-9] + )?%? Os leitores DEVEM poder ler esses números, bem como aceitar números que começam com um “.” Inicial, para que possam ler números na forma: ((. [0-9] +) | ([0- 9] + (. [0-9] +)? ([EE] [+ -]? [0-9] +)?))%? Cadeias constantes .. As cadeias constantes são cercadas por aspas duplas; para incorporar aspas duplas, o caractere de aspas duplas é usado duas vezes. As strings são armazenadas no formato UTF-8. Observe que, como todo o conteúdo é armazenado como XML, todas as aspas duplas na fórmula são realmente armazenadas como "no XML. As cadeias constantes correspondem ao padrão: \" ([^ "] | \" \ ") * \"
Intervalos / campos nomeados. Intervalos / campos nomeados referem-se a um valor definido separado ou conjunto de valores (em uma planilha, normalmente referente a um endereço de célula ou conjunto de endereços). Os nomes não diferenciam maiúsculas de minúsculas; portanto, "a" e "A" se referem ao mesmo intervalo. As implementações devem aceitar pelo menos intervalos nomeados que correspondam ao seguinte padrão: [A-Za-z] [A-Za-z0-9 _] *
Operadores. Operadores comuns de prefixo e prefixo são aceitos. Eles têm a seguinte associatividade e precedência (da prioridade mais baixa à mais alta):
A precedência pode ser substituída usando parênteses, então "= 2 + 3 * 4" calcula 14 enquanto "= (2 + 3) * 4" calcula 20. Observe que +, -, *, /, ^ converte qualquer string ou valores binários eles usam números antes de computar; Observe que & (concatenação de string) converte quaisquer valores em strings antes de concatená-los. Operadores lógicos. Operadores lógicos têm a mesma sintaxe que as chamadas de função; seus nomes não diferenciam maiúsculas de minúsculas, os parâmetros são separados por ponto e vírgula e seu nome DEVE ser seguido por parênteses. Os operadores lógicos são:
As implementações de AND (), OR () e IF () devem entrar em curto-circuito, ou seja, devem avaliar da esquerda para a direita e avaliar apenas as expressões que devem ser avaliadas para calcular o resultado. Uma implementação pode optar por avaliar mais, mas somente quando as expressões não têm efeitos colaterais. Implementações de AND () e OR () DEVEM aceitar um número arbitrário de parâmetros, mas DEVEM aceitar pelo menos 30 em cada uso. As operações NOT (), AND () e OR (), bem como a condição em IF (), destinam-se a valores booleanos; se expressões de outros tipos são usadas, uma implementação NÃO DEVE considerar 0 como falso e qualquer outro valor numérico como true, e NÃO DEVE considerar uma string de comprimento zero como false e qualquer outro valor de string como true. Se um valor de erro for calculado para uma expressão, esse primeiro erro será o resultado da operação lógica.
Chamadas de função.Uma chamada de função possui um nome de função que corresponde ao padrão [A-za-z] [A-Za-z0-9 _] * seguido por um parêntese de abertura, zero ou mais parâmetros e um parêntese de fechamento. Os parâmetros são separados por ponto e vírgula (não vírgula), embora os leitores PODEM opcionalmente aceitar chamadas de função usando vírgulas como separadores também. Os nomes das funções não diferenciam maiúsculas de minúsculas; portanto, "sum" e "SUM" são a mesma função. Se houver parâmetros, cada um deve ser uma expressão e nenhum pode estar vazio; portanto, X (;) não é uma chamada de função legal enquanto RAND () é perfeitamente legal. Se um parâmetro é opcional, PODE ser omitido, mas se omitido, seu separador DEVE ser omitido também (as especificações das funções devem indicar quais parâmetros são opcionais e o que significa omitir). As implementações típicas terão muitas funções internas, e a maioria das implementações também oferece suporte a uma ou mais maneiras de criar funções definidas pelo usuário. Funções comuns incluem:
Endereços de células que contêm números . Os endereços podem ser relativos ou absolutos. Um endereço relativo consiste em uma letra da coluna e um número de linha. Prefixar a letra da linha ou o número da coluna com a
$
torna a linha ou coluna absoluta.O espaço em branco (espaço, tabulação, nova linha e retorno de carro) é ignorado na sintaxe das fórmulas padrão, exceto no conteúdo das constantes de sequência e como um separador para vários endereços de intervalo de células em uma lista de endereços de intervalo de células.
As interfaces de usuário das implementações PODEM optar por aceitar e exibir fórmulas de maneira diferente de como elas são trocadas nesse formato de dados. Por exemplo, eles PODEM aceitar e exibir números usando o formato do local atual, PODEM sempre usar um local específico para formatos numéricos, PODEM usar vírgulas em vez de ponto-e-vírgula para separadores de parâmetros, PODE aceitar e exibir endereços de células sem exigir o uso de colchetes. Mas as interfaces de usuário de implementação DEVEM aceitar o formato padrão como entrada, bem como sempre que possível, por exemplo, implementações DEVEM aceitar números que atendam aos requisitos de localidade "C" (assim como a localidade atual) e DEVEM aceitar endereços de célula entre colchetes. Além disso, interfaces de usuário de implementação DEVE corrigir erros prováveis, possivelmente com um diálogo. Por exemplo,
A seguir, é apresentado um exemplo de uma fórmula simples:
=sum(A1:A5)
Esta fórmula calcula a soma dos valores de todas as células no intervalo ".A1: .A5". A função é "soma". Os parâmetros são marcados com um "(" no início e um ")" no final. Se uma função contiver mais de um parâmetro, os parâmetros serão separados por um ";". A seguir, é apresentada uma variação da fórmula mostrada acima:
=sum(A1;A2;A3;A4;A5)
O resultado desta fórmula é o mesmo. Os componentes que você usa na fórmula dependem do aplicativo que você está usando.
fonte
Depois de pesquisar um pouco mais, acho que
O mais próximo que encontrei de uma definição abrangente foi nesta postagem antiga da lista de discussão: http://lists.oasis-open.org/archives/office-comment/200411/msg00000.html , que contém uma gramática yacc, um tokenizador lex, e uma breve descrição da semântica.
Não está claro até que ponto isso corresponde à implementação da planilha do Google - vários exemplos não funcionam nas planilhas do Google.
Este parece um triste estado de coisas. Qualquer avanço nessas informações seria muito apreciado.
fonte
https://repository.tudelft.nl/islandora/object/uuid:d9d802af-9ebf-4524-9dbc-e7657d67921e/datastream/OBJ/download
A tese de mestrado de David Hoepelman, "refatoração e análise de planilhas assistidas por ferramentas" (Delft University of Technology) é de longe a melhor descrição da sintaxe da fórmula de planilha que eu já vi. BNFs, validação empírica e todos os adornos. No entanto, simples o suficiente para ser um bom guia para projetos codificados manualmente. XLParser é o projeto de código aberto associado ao GitHub mencionado na tese.
Infelizmente, é para o Excel não planilhas, mas, na medida em que as fórmulas das planilhas são compatíveis com o Excel, é um ótimo lugar para começar.
fonte