Полная справочная документация по формулам таблиц Google?

21

Как программист, я чувствую себя несколько разочарованным, когда пытаюсь использовать Google Spreadsheets, потому что, кажется, нет четкого описания синтаксиса, который я могу использовать для формул. Например, я прочитал, что могу использовать F3:Fдля ссылки на Fстолбец со строки 3 и ниже, но я не могу найти, где это упоминается в справочной документации Google, и кажется, что это не всегда работает. Я, вероятно, делаю это неправильно, но в этом суть этого вопроса.

Я не хочу рыться в пяти разных уроках, чтобы попытаться угадать правила! Есть ли где-нибудь краткое описание грамматики и семантики? Если нет, возможно, кто-то мог бы обобщить это здесь.

Rog
источник
docs.google.com/support/bin/… Не знаю, поможет ли это вообще (вот почему это просто комментарий :))
Мэтт
1
спасибо, это полезная часть картины, но почему они не могут документировать все это ?!
Рог
Нет проблем, не знаю, почему они этого не делают, но это очень похоже на execl и есть только несколько изменений синтаксиса. Если вы когда-нибудь застряли, вы всегда можете спросить здесь :)
Мэтт

Ответы:

11

Это некоторый текст, взятый отсюда . Я разместил это здесь как соломенный человек. Если кто-то, кто знает, как это отличается от формул в таблицах Google, может оставить комментарий, то, возможно, мы получим хороший ответ.

Формулы

Формулы позволяют выполнять вычисления в ячейках таблицы. Каждая формула МОЖЕТ начинаться с префикса пространства имен, определяющего синтаксис и семантику, используемые в формуле. Когда префикса нет, используются синтаксис и семантика формулы по умолчанию, как описано ниже. За этим следует знак равенства, а затем сама формула. Реализации МОГУТ принимать несколько синтаксисов формул, и МОГУТ принимать различные расширения синтаксиса формул по умолчанию. Однако все реализации, которые принимают формулы, ДОЛЖНЫ принимать синтаксис и семантику формул по умолчанию, как описано здесь. Они МОГУТ также принимать расширения к нему.

Документ, реализующий строгую схему, НЕ МОЖЕТ использовать префикс пространства имен формулы (поскольку нет гарантии, что другие принимающие системы смогут обработать его), и НЕ МОЖЕТ использовать какие-либо расширения семантики и синтаксиса, описанных ниже. В формуле по умолчанию. синтаксис, после начального знака равенства формула должна быть выражением. Выражение может быть числом, константной строкой, именованным диапазоном, парой выражений, связанных двоичным оператором, выражением с префиксом унарного оператора, логическим оператором, вызовом функции, адресом ячейки или выражением, окруженным круглые скобки. Вызов функции и логический оператор могут иметь ноль или более параметров, разделенных точкой с запятой, и каждый параметр ДОЛЖЕН быть выражением. Синтаксис для каждого из них следующий:

  • чисел, Числа записываются и читаются в этом формате с использованием локали «C» (с использованием десятичного разделителя «.» И без разделителя тысяч), с использованием setlocale (LC_NUMERIC, «C») или эквивалентного. Числа могут заканчиваться на%, что делит это число на 100. «%» не меняет значения других операторов, поэтому 2 + 10% составляет 2,1 (а не 2,2). Обратите внимание, что начальные знаки - и + допускаются как унарные операторы, как описано ниже. Авторы ДОЛЖНЫ написать числа, соответствующие шаблону (обратите внимание, что он должен начинаться с цифры): [0-9] + (. [0-9] +)? ([EE] [+ -]? [0-9] + )?%? Читатели ДОЛЖНЫ иметь возможность считывать эти числа, а также принимать числа, начинающиеся с начального «.», Поэтому они должны иметь возможность читать числа в форме: ((. [0-9] +) | ([0- 9] + (. [0-9] +)? ([EE] [+ -]? [0-9] +)?))%? Строки-константы. Строки-константы заключены в двойные кавычки; вставлять двойные кавычки, символ двойной кавычки используется дважды. Строки хранятся в формате UTF-8. Обратите внимание, что, поскольку весь контент хранится в формате XML, все двойные кавычки в формуле фактически сохраняются как «в XML. Строки-константы соответствуют шаблону: \" ([^ "] | \" \ ") * \"

  • Именованные диапазоны / Поля. Именованные диапазоны / поля относятся к отдельному определенному значению или набору значений (в электронной таблице, как правило, ссылаются на адрес ячейки или набор адресов). Имена не чувствительны к регистру, поэтому «a» и «A» относятся к одному и тому же диапазону. Реализации должны принимать как минимум именованные диапазоны, соответствующие следующему шаблону: [A-Za-z] [A-Za-z0-9 _] *

  • Операторы. Обычные инфиксные и префиксные операторы принимаются. Они имеют следующую ассоциативность и приоритет (от низшего к высшему приоритету):

Ассоциативность Оператор (ы) Комментарии
left <, =,>, <=,> =, <> Меньше, равно, больше, чем,
                                     меньше или равно, больше или равно,
                                     не равно.
left +, -, & Добавить, вычесть, конкатенация строк. Обратите внимание, что
                                     унарный (префикс) + и - имеет другой приоритет.
влево *, / Умножить, разделить. Деление не усекается, поэтому
                                     1/2 равно 0,5.
право ^ Сила (2 ^ 3 - 8). Читатели ДОЛЖНЫ также принять «**».
none +, - Префиксные унарные операторы, например, -5 или - [. A1].
                                     Обратите внимание, что они имеют разность приоритетов, чем
                                     сложить и вычесть

Приоритет можно переопределить с помощью скобок, поэтому «= 2 + 3 * 4» вычисляет 14, а «= (2 + 3) * 4» - 20. Обратите внимание, что +, -, *, /, ^ преобразуют любые строковые или двоичные значения они используют в числах перед вычислением; обратите внимание, что & (конкатенация строк) преобразует любые значения в строки перед их конкатенацией. Логические операторы. Логические операторы имеют тот же синтаксис, что и вызовы функций; их имена нечувствительны к регистру, параметры разделяются точкой с запятой, а за их именем ДОЛЖНЫ следовать круглые скобки. Логические операторы:


Оператор Параметр count Комментарий
TRUE () 0 Это логическая константа, хотя ее синтаксис делает ее похожей на функцию
FALSE () 0 Это логическая константа
NOT (выражение) 1 Если выражение TRUE () возвращает FALSE (), иначе возвращает TRUE ()
И (e1; e2 [; e] *) 2 или более Если все выражения TRUE (), возвращает TRUE (), иначе возвращает FALSE ()
ИЛИ (e1; e2 [; e] *) 2 или более. Если все выражения FALSE (), возвращает FALSE (), иначе возвращает TRUE ().
IF (условие; true_exp; false_exp)
                   3 Оценивает состояние. Если это правда, вернуть true_exp, иначе вернуть false_exp

Реализации AND (), OR () и IF () должны быть закорочены, то есть они должны поочередно оценивать слева направо и оценивать только те выражения, которые должны вычислять для вычисления результата. Реализация может выбрать оценку больше, но только когда выражения не имеют побочных эффектов. Реализации AND () и OR () ДОЛЖНЫ принимать произвольное количество параметров, но ДОЛЖНЫ принимать не менее 30 при каждом использовании. Операции NOT (), AND () и OR (), а также условие в IF () предназначены для логических значений; если используются выражения других типов, реализация НЕ ДОЛЖНА рассматривать 0 как false, а любое другое числовое значение - как true, и НЕ ДОЛЖНА рассматривать строку нулевой длины как false, а любое другое строковое значение - как true. Если для выражения вычисляется значение ошибки, то эта первая ошибка является результатом логической операции.


Вызовы функций.Вызов функции имеет имя функции, соответствующее шаблону [A-za-z] [A-Za-z0-9 _] *, за которым следует открывающая скобка, ноль или более параметров и закрывающая скобка. Параметры разделяются точкой с запятой (не запятой), хотя читатели МОГУТ дополнительно принимать вызовы функций, используя запятые также в качестве разделителей. Имена функций не чувствительны к регистру, поэтому «сумма» и «сумма» - это одна и та же функция. Если есть параметры, каждое из них должно быть выражением, и ни один из них не может быть пустым, поэтому X (;) не является допустимым вызовом функции, а RAND () является совершенно допустимым. Если параметр является необязательным, он МОЖЕТ быть опущен, но если он опущен, его разделитель ДОЛЖЕН также быть опущен (в спецификациях функций должно быть указано, какие параметры являются необязательными и что означает их пропуск). Типичные реализации будут иметь много встроенных функций, и большинство реализаций также поддерживают один или несколько способов создания пользовательских функций. Общие функции включают в себя:

  • SUM ( список ) - суммирует все числа в диапазоне (-ах) списка .
  • COUNT ( список ) - подсчитывает количество чисел в диапазоне (-ах) списка
  • AVERAGE ( список ) - вычисляет среднее значение, равное сумме ( список ) / COUNT ( список )
  • MIN ( список ) - минимальное числовое значение списка
  • MAX ( список ) - максимальное значение списка
  • ROUND ( n , count ) - округлить n до количества цифр (если count не указано, count = 0)
  • INT ( n ) - округлить n до ближайшего целого числа.
  • ISEVEN ( n ) - возвращает TRUE (), если n четное, иначе возвращает FALSE ().
  • ЗАМЕНА ( текст ; SearchText ; newtext ; возникновение ) - заменители newtext для SearchText в тексте , вхождения числа раз (если появление опущенного, все времена).

Адреса ячеек, содержащих цифры . Адреса могут быть относительными или абсолютными. Относительный адрес состоит из буквы столбца и номера строки. Префикс буквы строки или номера столбца с $делает строку или столбец абсолютным.

Пробел (пробел, табуляция, перевод строки и возврат каретки) игнорируется в синтаксисе формул по умолчанию, за исключением содержимого строковых констант и в качестве разделителя для нескольких адресов диапазона ячеек в списке адресов диапазона ячеек.

Пользовательские интерфейсы реализаций МОГУТ выбрать принятие и отображение формул иначе, чем в этом формате данных. Например, они МОГУТ принимать и отображать числа, используя формат текущей локали, они МОГУТ всегда использовать конкретную локаль для числовых форматов, МОГУТ использовать запятые вместо точек с запятой для разделителей параметров, и МОГУТ принимать и отображать адреса ячеек, не требуя использование квадратных скобок. Но пользовательские интерфейсы реализации ДОЛЖНЫ принимать формат по умолчанию в качестве входных данных, а также, где это возможно, например, реализации ДОЛЖНЫ принимать числа, которые соответствуют требованиям локали «C» (а также текущей локали), и ДОЛЖНЫ принимать адреса ячеек в скобках. Кроме того, пользовательские интерфейсы реализации ДОЛЖНЫ исправлять возможные ошибки, возможно, с помощью диалога. Например,

Ниже приведен пример простой формулы:

=sum(A1:A5)

Эта формула вычисляет сумму значений всех ячеек в диапазоне «.A1: .A5». Функция «сумма». Параметры отмечены как «(« в начале и «)» в конце. Если функция содержит более одного параметра, параметры разделяются знаком «;». Ниже приведен вариант формулы, показанной выше:

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

Результат этой формулы тот же. Компоненты, которые вы используете в формуле, зависят от приложения, которое вы используете.

Rog
источник
Отличный ответ, @rog. Есть ли у вас идеи, почему в документации по функциям Google для разделения параметров используются запятые вместо точек с запятой? Они не работают ни в одном из моих тестов.
Jpsy
@Jpsy: разделитель параметров зависит от настроек электронной таблицы. Точка с запятой используется, когда запятая является десятичным разделителем.
Рубен
«Реализации AND (), OR () и IF () должны быть замкнуты» - к сожалению, я не вижу этого в таблицах Google на момент написания этой статьи. Я попытался «И (ЛОЖЬ, выражение с несоответствием типов)», и вместо игнорирования второй части в результате получается ошибка второго операнда. К счастью, есть обходной путь для stackoverflow: stackoverflow.com/a/16926642/2184166
ob-ivan
6

Обыскав немного больше, я обнаружил, что

  1. Формулы электронных таблиц Google реализуют стандарт де-факто , следуя Microsoft Excel и другим.
  2. Стандарт, кажется, никогда не был определен должным образом .

Ближайшее к исчерпывающему определению, которое я нашел, было в этом старом сообщении списка рассылки: http://lists.oasis-open.org/archives/office-comment/200411/msg00000.html , которое содержит грамматику yacc, лекс-токенизатор, и краткое описание семантики.

Не ясно, насколько близко это соответствует реализации электронных таблиц Google - некоторые примеры не работают в электронных таблицах Google.

Это кажется печальным положением дел. Любое продвижение по этой информации будет высоко ценится.

Rog
источник
Со времени написания поста был достигнут большой прогресс. Относительно OpenDocument см. Анонсы
Рубен
-2

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

Магистерская диссертация Дэвида Хопельмана «Рефакторинг электронных таблиц с помощью инструментов и анализ формул электронных таблиц» (Делфтский технологический университет) - безусловно лучшее описание синтаксиса формул электронных таблиц, которое я видел. БНФ, эмпирическая проверка и все отделки. Все же достаточно просто, чтобы быть хорошим руководством для проектов, написанных вручную. XLParser - это сопутствующий проект GitHub с открытым исходным кодом, упомянутый в диссертации.

Увы, для Excel не листы, а в той степени, в которой формулы листов совместимы с Excel, это отличное место для начала.

Humbertcopperfield
источник