Найти тему
Сделано!

32. Google таблицы. Сумма прописью автоматом

Часто возникает необходимость, при заполнении различных бланков, указывать сумму прописью. Это, конечно, можно делать и в ручную, но гораздо проще доверить машине перевод цифр в буквы.

Давайте в хэтом уроке рассмотрим простой способ преобразования суммы в сумму прописью.

Что нам понадобится? Нам понадобится сумма, которую нужно преобразовать. В нашем примере, пусть, это будет цифра, указанная в ячейке A1.

-2

Переходим в режим работы со скриптами

-3

У нас открывается окно для работы со скриптами

-4

Давайте присвоим имя нашему проекту. Для этого щелкнем мышью по названию

-5

Введем название нашего проекта, например Summ. И щелкнем курсором мыши по "Переименовать"

-6

Далее в разделе "Код.gs"

-7

Помещаем текст скрипта, который переводит сумму цифрами в сумму прописью.

Я предлагаю Вам ничего не выдумывать, а взять готовый код

var mapNumbers = {

0 : [2, 1, "ноль"],

1 : [0, 2, "один", "одна"],

2 : [1, 2, "два", "две"],

3 : [1, 1, "три"],

4 : [1, 1, "четыре"],

5 : [2, 1, "пять"],

6 : [2, 1, "шесть"],

7 : [2, 1, "семь"],

8 : [2, 1, "восемь"],

9 : [2, 1, "девять"],

10 : [2, 1, "десять"],

11 : [2, 1, "одиннадцать"],

12 : [2, 1, "двенадцать"],

13 : [2, 1, "тринадцать"],

14 : [2, 1, "четырнадцать"],

15 : [2, 1, "пятнадцать"],

16 : [2, 1, "шестнадцать"],

17 : [2, 1, "семнадцать"],

18 : [2, 1, "восемнадцать"],

19 : [2, 1, "девятнадцать"],

20 : [2, 1, "двадцать"],

30 : [2, 1, "тридцать"],

40 : [2, 1, "сорок"],

50 : [2, 1, "пятьдесят"],

60 : [2, 1, "шестьдесят"],

70 : [2, 1, "семьдесят"],

80 : [2, 1, "восемьдесят"],

90 : [2, 1, "девяносто"],

100 : [2, 1, "сто"],

200 : [2, 1, "двести"],

300 : [2, 1, "триста"],

400 : [2, 1, "четыреста"],

500 : [2, 1, "пятьсот"],

600 : [2, 1, "шестьсот"],

700 : [2, 1, "семьсот"],

800 : [2, 1, "восемьсот"],

900 : [2, 1, "девятьсот"]

};

var mapOrders = [

{ _Gender : true, _arrStates : ["рубль", "рубля", "рублей"] },

{ _Gender : false, _arrStates : ["тысяча", "тысячи", "тысяч"] },

{ _Gender : true, _arrStates : ["миллион", "миллиона", "миллионов"] },

{ _Gender : true, _arrStates : ["миллиард", "миллиарда", "миллиардов"] },

{ _Gender : true, _arrStates : ["триллион", "триллиона", "триллионов"] }

];

var objKop = { _Gender : false, _arrStates : ["копейка", "копейки", "копеек"] };

function Value(dVal, bGender) {

var xVal = mapNumbers[dVal];

if (xVal[1] == 1) {

return xVal[2];

} else {

return xVal[2 + (bGender ? 0 : 1)];

}

}

function From0To999(fValue, oObjDesc, fnAddNum, fnAddDesc)

{

var nCurrState = 2;

if (Math.floor(fValue/100) > 0) {

var fCurr = Math.floor(fValue/100)*100;

fnAddNum(Value(fCurr, oObjDesc._Gender));

nCurrState = mapNumbers[fCurr][0];

fValue -= fCurr;

}

if (fValue < 20) {

if (Math.floor(fValue) > 0) {

fnAddNum(Value(fValue, oObjDesc._Gender));

nCurrState = mapNumbers[fValue][0];

}

} else {

var fCurr = Math.floor(fValue/10)*10;

fnAddNum(Value(fCurr, oObjDesc._Gender));

nCurrState = mapNumbers[fCurr][0];

fValue -= fCurr;

if (Math.floor(fValue) > 0) {

fnAddNum(Value(fValue, oObjDesc._Gender));

nCurrState = mapNumbers[fValue][0];

}

}

fnAddDesc(oObjDesc._arrStates[nCurrState]);

}

function FloatToSamplesInWordsRus(fAmount)

{

var fInt = Math.floor(fAmount + 0.005);

var fDec = Math.floor(((fAmount - fInt) * 100) + 0.5);

var arrRet = [];

var iOrder = 0;

var arrThousands = [];

for (; fInt > 0.9999; fInt/=1000) {

arrThousands.push(Math.floor(fInt % 1000));

}

if (arrThousands.length == 0) {

arrThousands.push(0);

}

function PushToRes(strVal) {

arrRet.push(strVal);

}

for (var iSouth = arrThousands.length-1; iSouth >= 0; --iSouth) {

if (arrThousands[iSouth] == 0) {

continue;

}

From0To999(arrThousands[iSouth], mapOrders[iSouth], PushToRes, PushToRes);

}

if (arrThousands[0] == 0) {

//  Handle zero amount

if (arrThousands.length == 1) {

PushToRes(Value(0, mapOrders[0]._Gender));

}

var nCurrState = 2;

PushToRes(mapOrders[0]._arrStates[nCurrState]);

}

if (arrRet.length > 0) {

// Capitalize first letter

arrRet[0] = arrRet[0].match(/^(.)/)[1].toLocaleUpperCase() + arrRet[0].match(/^.(.*)$/)[1];

}

arrRet.push((fDec < 10) ? ("0" + fDec) : ("" + fDec));

From0To999(fDec, objKop, function() {}, PushToRes);

return arrRet.join(" ");

}

Вставляем наш код в поле для редактирования скрипта

-8

Далее нажимаем на изображение дискеты, чтобы сохранить наш проект

-9

Теперь можно закрыть редактор скриптов и вернуться в нашу таблицу.

В нужной нам ячейке, а именно в ячейке, куда нам нужно вывести число прописью мы вводим нашу функцию

Вызывается преобразование суммы в текстовый вид функцией

FloatToSamplesInWordsRus(fAmount)

где fAmount - это ссылка на ячейку с числом в цифровом виде.

-10

В результате выполнения функции мы получим число, записанное прописью

-11

Можно модифицировать этот код, например заменив рубли на килограммы

-12

Образец таблицы с этим скриптом преобразования числа в число прописью вы можете скачать по ссылке:

Сумма прописью

Подписывайтесь на канал, ставьте лайки и пишите комментарии.

Все остальные уроки по Гугл таблицам Вы можете посмотреть, посетив страницу с содержанием:

Без рекламы и только про Гугл таблицы можно почитать здесь в моем канале на boosty. По ссылке Вас ждет бесплатный доступ. Заходите и регистрируйтесь!

Сделано! - О сложном - просто