PropNum.ruPropNum
Инструменты и интеграции

Сумма прописью в Google Таблицах: скрипт Apps Script за 5 минут

5 мин чтения

Google Sheets не умеет переводить числа в русский текст. Стандартных формул для этого нет. Но есть Apps Script — встроенный инструмент для написания скриптов прямо в таблице. С его помощью можно добавить свою функцию =PROPNUM() и использовать её как обычную формулу.

Ниже — пошаговая инструкция с готовым кодом.

Способ 1: Пользовательская функция через Apps Script

Шаг 1. Откройте редактор скриптов

В Google Таблицах: меню Расширения → Apps Script.

Откроется редактор кода. Удалите стандартный пустой код function myFunction() {}.

Шаг 2. Вставьте код

function PROPNUM(summa) {
  if (typeof summa !== 'number') return 'Ошибка: введите число';
  
  var rubles = Math.floor(summa);
  var kopecks = Math.round((summa - rubles) * 100);
  
  return numberToText(rubles) + ' рублей ' + 
    (kopecks < 10 ? '0' : '') + kopecks + ' копеек';
}

function numberToText(n) {
  if (n === 0) return 'Ноль';
  
  var billions  = Math.floor(n / 1000000000);
  var millions  = Math.floor((n % 1000000000) / 1000000);
  var thousands = Math.floor((n % 1000000) / 1000);
  var units     = n % 1000;
  
  var result = '';
  
  if (billions > 0)  result += groupToText(billions, 'm') + ' миллиард' + billionSuffix(billions) + ' ';
  if (millions > 0)  result += groupToText(millions, 'm') + ' миллион' + millionSuffix(millions) + ' ';
  if (thousands > 0) result += groupToText(thousands, 'f') + ' тысяч' + thousandSuffix(thousands) + ' ';
  if (units > 0)     result += groupToText(units, 'm');
  
  result = result.trim();
  return result.charAt(0).toUpperCase() + result.slice(1);
}

function groupToText(n, gender) {
  var hundreds = ['', 'сто', 'двести', 'триста', 'четыреста', 
                  'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'];
  var tens     = ['', 'десять', 'двадцать', 'тридцать', 'сорок', 'пятьдесят',
                  'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'];
  var teens    = ['', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать',
                  'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'];
  var unitsM   = ['', 'один', 'два', 'три', 'четыре', 'пять', 
                  'шесть', 'семь', 'восемь', 'девять'];
  var unitsF   = ['', 'одна', 'две', 'три', 'четыре', 'пять', 
                  'шесть', 'семь', 'восемь', 'девять'];
  
  var h = Math.floor(n / 100);
  var t = Math.floor((n % 100) / 10);
  var u = n % 10;
  
  var parts = [];
  if (h > 0) parts.push(hundreds[h]);
  
  if (t === 1 && u > 0) {
    parts.push(teens[u]);
  } else {
    if (t > 0) parts.push(tens[t]);
    if (u > 0) parts.push(gender === 'f' ? unitsF[u] : unitsM[u]);
  }
  
  return parts.join(' ');
}

function billionSuffix(n) {
  var u = n % 100;
  if (u >= 11 && u <= 19) return 'ов';
  switch (n % 10) {
    case 1: return '';
    case 2: case 3: case 4: return 'а';
    default: return 'ов';
  }
}

function millionSuffix(n) {
  var u = n % 100;
  if (u >= 11 && u <= 19) return 'ов';
  switch (n % 10) {
    case 1: return '';
    case 2: case 3: case 4: return 'а';
    default: return 'ов';
  }
}

function thousandSuffix(n) {
  var u = n % 100;
  if (u >= 11 && u <= 19) return '';
  switch (n % 10) {
    case 1: return 'а';
    case 2: case 3: case 4: return 'и';
    default: return '';
  }
}

Шаг 3. Сохраните

Нажмите Ctrl+S (или кнопку «Сохранить проект» в редакторе). Дайте проекту имя — например, «Прописью».

Шаг 4. Используйте в таблице

Вернитесь в таблицу. В любой ячейке введите:

=PROPNUM(A1)

Результат: «Двадцать пять тысяч рублей 00 копеек».

При первом использовании Google попросит разрешить скрипту доступ к таблице — нажмите «Разрешить».

Способ 2: запрос к API PropNum

Если не хотите держать весь алгоритм склонения в таблице, оставьте ту же функцию PROPNUM, но её тело пусть обращается к API PropNum — логика склонения всегда актуальна на стороне сервиса. Используйте либо этот вариант, либо локальный из Способа 1 — не оба сразу. API отдаёт JSON, поэтому IMPORTDATA здесь не подойдёт (она ждёт CSV) — нужен UrlFetchApp:

function PROPNUM(summa) {
  if (typeof summa !== 'number') return 'Ошибка: введите число';
  var url = 'https://propnum.ru/api/convert/num?amount=' + summa;
  var response = UrlFetchApp.fetch(url);
  var data = JSON.parse(response.getContentText());
  return data.result.full;
}

Вызов тот же — =PROPNUM(A1), но склонение считается на сервере. Для родительного падежа (шапка договора) сделайте по аналогии функцию PROPNUM_GEN с параметром &case=gen.

Ограничение: функция обращается к сети при каждом пересчёте, поэтому для больших таблиц удобнее локальный скрипт (Способ 1) — он работает мгновенно и без интернета. Учитывайте лимит API: 10 запросов в минуту с одного IP.

Важно: скрипт сохраняется в таблице

Когда вы добавляете скрипт через Apps Script, он привязан к конкретному файлу Google Таблиц. Если поделиться таблицей с коллегой — функция =PROPNUM() будет работать у него тоже, скрипт передаётся вместе с файлом.

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

Подробная инструкция по интеграции

Пошаговое руководство по подключению PropNum к Google Таблицам — с примерами запросов и частыми ошибками — собрано на отдельной странице.

→ Интеграция с Google Таблицами

Сравнение двух способов

Локальный скриптФункция через API
Работает без интернетаДаНет
Скорость пересчётаМгновенноС задержкой на сетевой запрос
Актуальность алгоритмаНужно обновлять вручнуюВсегда актуальна на сервере
Сложность настройкиСредняяНизкая
ЛимитыНет10 запросов/мин на IP

Частые вопросы

Скрипт перестал работать после обновления Google?
Иногда Apps Script требует повторного разрешения после длительного перерыва. Откройте редактор скриптов, запустите функцию вручную — Google снова попросит разрешение.
Функция возвращает #NAME? вместо текста.
Это значит, что скрипт не сохранён или не подключён к текущему файлу. Откройте Расширения → Apps Script и убедитесь, что код там есть.
Можно ли добавить НДС в формулу?
Да, достаточно доработать функцию PROPNUM: добавить параметр ставки и рассчитывать НДС внутри скрипта. Или передавать в ячейку уже сумму с НДС, рассчитанную через стандартные формулы.
Работает ли скрипт на мобильном телефоне в приложении Google Таблицы?
Пользовательские функции Apps Script работают в мобильном приложении — результат отображается. Но редактировать скрипт с телефона неудобно, лучше настраивать с компьютера.

Попробуйте инструменты PropNum

Похожие статьи