Как программист, я чувствую себя несколько разочарованным, когда пытаюсь использовать Google Spreadsheets, потому что, кажется, нет четкого описания синтаксиса, который я могу использовать для формул. Например, я прочитал, что могу использовать F3:F
для ссылки на F
столбец со строки 3 и ниже, но я не могу найти, где это упоминается в справочной документации Google, и кажется, что это не всегда работает. Я, вероятно, делаю это неправильно, но в этом суть этого вопроса.
Я не хочу рыться в пяти разных уроках, чтобы попытаться угадать правила! Есть ли где-нибудь краткое описание грамматики и семантики? Если нет, возможно, кто-то мог бы обобщить это здесь.
Ответы:
Это некоторый текст, взятый отсюда . Я разместил это здесь как соломенный человек. Если кто-то, кто знает, как это отличается от формул в таблицах 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 _] *
Операторы. Обычные инфиксные и префиксные операторы принимаются. Они имеют следующую ассоциативность и приоритет (от низшего к высшему приоритету):
Приоритет можно переопределить с помощью скобок, поэтому «= 2 + 3 * 4» вычисляет 14, а «= (2 + 3) * 4» - 20. Обратите внимание, что +, -, *, /, ^ преобразуют любые строковые или двоичные значения они используют в числах перед вычислением; обратите внимание, что & (конкатенация строк) преобразует любые значения в строки перед их конкатенацией. Логические операторы. Логические операторы имеют тот же синтаксис, что и вызовы функций; их имена нечувствительны к регистру, параметры разделяются точкой с запятой, а за их именем ДОЛЖНЫ следовать круглые скобки. Логические операторы:
Реализации AND (), OR () и IF () должны быть закорочены, то есть они должны поочередно оценивать слева направо и оценивать только те выражения, которые должны вычислять для вычисления результата. Реализация может выбрать оценку больше, но только когда выражения не имеют побочных эффектов. Реализации AND () и OR () ДОЛЖНЫ принимать произвольное количество параметров, но ДОЛЖНЫ принимать не менее 30 при каждом использовании. Операции NOT (), AND () и OR (), а также условие в IF () предназначены для логических значений; если используются выражения других типов, реализация НЕ ДОЛЖНА рассматривать 0 как false, а любое другое числовое значение - как true, и НЕ ДОЛЖНА рассматривать строку нулевой длины как false, а любое другое строковое значение - как true. Если для выражения вычисляется значение ошибки, то эта первая ошибка является результатом логической операции.
Вызовы функций.Вызов функции имеет имя функции, соответствующее шаблону [A-za-z] [A-Za-z0-9 _] *, за которым следует открывающая скобка, ноль или более параметров и закрывающая скобка. Параметры разделяются точкой с запятой (не запятой), хотя читатели МОГУТ дополнительно принимать вызовы функций, используя запятые также в качестве разделителей. Имена функций не чувствительны к регистру, поэтому «сумма» и «сумма» - это одна и та же функция. Если есть параметры, каждое из них должно быть выражением, и ни один из них не может быть пустым, поэтому X (;) не является допустимым вызовом функции, а RAND () является совершенно допустимым. Если параметр является необязательным, он МОЖЕТ быть опущен, но если он опущен, его разделитель ДОЛЖЕН также быть опущен (в спецификациях функций должно быть указано, какие параметры являются необязательными и что означает их пропуск). Типичные реализации будут иметь много встроенных функций, и большинство реализаций также поддерживают один или несколько способов создания пользовательских функций. Общие функции включают в себя:
Адреса ячеек, содержащих цифры . Адреса могут быть относительными или абсолютными. Относительный адрес состоит из буквы столбца и номера строки. Префикс буквы строки или номера столбца с
$
делает строку или столбец абсолютным.Пробел (пробел, табуляция, перевод строки и возврат каретки) игнорируется в синтаксисе формул по умолчанию, за исключением содержимого строковых констант и в качестве разделителя для нескольких адресов диапазона ячеек в списке адресов диапазона ячеек.
Пользовательские интерфейсы реализаций МОГУТ выбрать принятие и отображение формул иначе, чем в этом формате данных. Например, они МОГУТ принимать и отображать числа, используя формат текущей локали, они МОГУТ всегда использовать конкретную локаль для числовых форматов, МОГУТ использовать запятые вместо точек с запятой для разделителей параметров, и МОГУТ принимать и отображать адреса ячеек, не требуя использование квадратных скобок. Но пользовательские интерфейсы реализации ДОЛЖНЫ принимать формат по умолчанию в качестве входных данных, а также, где это возможно, например, реализации ДОЛЖНЫ принимать числа, которые соответствуют требованиям локали «C» (а также текущей локали), и ДОЛЖНЫ принимать адреса ячеек в скобках. Кроме того, пользовательские интерфейсы реализации ДОЛЖНЫ исправлять возможные ошибки, возможно, с помощью диалога. Например,
Ниже приведен пример простой формулы:
=sum(A1:A5)
Эта формула вычисляет сумму значений всех ячеек в диапазоне «.A1: .A5». Функция «сумма». Параметры отмечены как «(« в начале и «)» в конце. Если функция содержит более одного параметра, параметры разделяются знаком «;». Ниже приведен вариант формулы, показанной выше:
=sum(A1;A2;A3;A4;A5)
Результат этой формулы тот же. Компоненты, которые вы используете в формуле, зависят от приложения, которое вы используете.
источник
Обыскав немного больше, я обнаружил, что
Ближайшее к исчерпывающему определению, которое я нашел, было в этом старом сообщении списка рассылки: http://lists.oasis-open.org/archives/office-comment/200411/msg00000.html , которое содержит грамматику yacc, лекс-токенизатор, и краткое описание семантики.
Не ясно, насколько близко это соответствует реализации электронных таблиц Google - некоторые примеры не работают в электронных таблицах Google.
Это кажется печальным положением дел. Любое продвижение по этой информации будет высоко ценится.
источник
https://repository.tudelft.nl/islandora/object/uuid:d9d802af-9ebf-4524-9dbc-e7657d67921e/datastream/OBJ/download
Магистерская диссертация Дэвида Хопельмана «Рефакторинг электронных таблиц с помощью инструментов и анализ формул электронных таблиц» (Делфтский технологический университет) - безусловно лучшее описание синтаксиса формул электронных таблиц, которое я видел. БНФ, эмпирическая проверка и все отделки. Все же достаточно просто, чтобы быть хорошим руководством для проектов, написанных вручную. XLParser - это сопутствующий проект GitHub с открытым исходным кодом, упомянутый в диссертации.
Увы, для Excel не листы, а в той степени, в которой формулы листов совместимы с Excel, это отличное место для начала.
источник