Формула всегда заканчивается return, который возвращает значение ячейки.
let price = $goods.price[findRowId(goods, name, $orders.product_name)];
let qty = $orders.qty;
return price * qty;
| Синтаксис |
Описание |
$tab.field |
Значение поля field из вкладки tab, та же строка |
$tab.field[123] |
Значение поля field из вкладки tab, строка с ID=123 |
$tab.field[findRowId(tab, field, value)] |
Поиск строки, где field = value, затем чтение field |
$orders.qty
$orders.qty[findRowId(goods, name, $orders.product_name)]
$clients.phone[findRowId(clients, name, $orders.client)]
42 // число
-3.14 // число со знаком
"hello" // строка
true/false // булевы
null // null
f"Сумма: {qty * price} руб."
f"{name}: {phone ?? '—'}"
`Сумма: ${qty * price} руб.`
Внутри ${...} — любое выражение. Для ссылок на ячейки используйте $tab.field.
| Оператор |
Описание |
+ |
сложение / конкатенация строк |
- |
вычитание / унарный минус |
* |
умножение |
/ |
деление |
% |
остаток от деления |
** |
возведение в степень |
== != > < >= <=
&& || ! ?? (nullish coalescing)
"a" + 42 → "a42" (авто-приведение)
let total = price * qty;
let discount = total > 1000 ? 0.1 : 0;
return total * (1 - discount);
let — иммутабельная переменная. Область видимости — текущая формула.
return total > 1000 ? total * 0.9 : total;
if (total > 10000) {
return "VIP";
} else if (total > 1000) {
return "Базовый";
} else {
return "Эконом";
}
return if(total > 1000, total * 0.9, total);
| Функция |
Описание |
abs(x) |
Абсолютное значение |
round(x, d) |
Округление (d=2 по умолч.) |
ceil(x) |
Округление вверх |
floor(x) |
Округление вниз |
min(a, b, ...) |
Минимум |
max(a, b, ...) |
Максимум |
sqrt(x) |
Квадратный корень |
clamp(x, lo, hi) |
Ограничить диапазоном |
| Функция |
Описание |
upper(s) |
В верхний регистр |
lower(s) |
В нижний регистр |
trim(s) |
Убрать пробелы |
len(s) |
Длина строки |
left(s, n) |
Первые n символов |
right(s, n) |
Последние n символов |
mid(s, start, n?) |
Подстрока |
replace(s, from, to) |
Замена подстроки |
contains(s, sub) |
Содержит подстроку? |
starts_with(s, sub) |
Начинается с? |
ends_with(s, sub) |
Заканчивается на? |
format_num(n, d?) |
Форматировать число |
| Функция |
Описание |
is_empty(x) |
null, "", NaN? |
coalesce(a, b, ...) |
Первое не-пустое значение |
default(x, fallback) |
Значение по умолчанию |
| Функция |
Описание |
sum($tab.field) |
Сумма значений колонки |
avg($tab.field) |
Среднее |
count($tab.field) |
Количество не-null |
count_all($tab) |
Количество строк |
min_of($tab.field) |
Минимальное |
max_of($tab.field) |
Максимальное |
| Функция |
Описание |
today() |
Сегодня (YYYY-MM-DD) |
now() |
Текущий timestamp ISO |
format_date(d, fmt) |
Форматировать дату |
days_between(d1, d2) |
Разница в днях |
add_days(d, n) |
Прибавить дни |
add_months(d, n) |
Прибавить месяцы |
day(d) |
День месяца (1-31) |
month(d) |
Месяц (1-12) |
year(d) |
Год |
Форматы format_date: YYYY, YY, MM, DD, HH, mm, ss
- Длина формулы ≤ 4096 символов
- Время выполнения ≤ 1 с
- Циклы отсутствуют (нет
for / while)
- Прямое редактирование ячейки типа «Функция» невозможно
- Ошибка в формуле → значение
null, ячейка не обновляется
return $orders.qty * $goods.price[findRowId(goods, name, $orders.product_name)];
let price = $goods.price[findRowId(goods, name, $orders.product_name)];
let qty = $orders.qty;
let discount = qty > 100 ? 0.15 : qty > 10 ? 0.05 : 0;
return `Сумма: ${round(price * qty * (1 - discount))} руб.`;
let total = $orders.qty * $goods.price[findRowId(goods, name, $orders.product_name)];
if (total > 10000) {
return "VIP";
} else if (total > 1000) {
return "Базовый";
} else {
return "Эконом";
}
return f"Выполнено: {count($tasks.id)} / {count_all($tasks)}";
return default($client.phone, default($client.email, "—"));