Как сделать сумму прописью в Таблицах?

Раньше дополнение ставилось, сейчас такого нет.
  • Вопрос задан
  • 11529 просмотров
Решения вопроса 3
krimtsev
@krimtsev Автор вопроса
Нашел. Необходимо самому открыть "Инструменты -> Редактор скриптов" и добавить скрипт.
Дальше в необходимом нам месте указацить функцию =number_to_string(номер ячейки).

Рабочий код так же прикрепляю под спойлером.

spoiler
function number_to_string(_number) {
        var _arr_numbers = new Array();
        _arr_numbers[1] = new Array('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
        _arr_numbers[2] = new Array('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
        _arr_numbers[3] = new Array('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
        function number_parser(_num, _desc) {
                var _string = '';
                var _num_hundred = '';
                if (_num.length == 3) {
                        _num_hundred = _num.substr(0, 1);
                        _num = _num.substr(1, 3);
                        _string = _arr_numbers[3][_num_hundred] + ' ';
                }
                if (_num < 20) _string += _arr_numbers[1][parseFloat(_num)] + ' ';
                else {
                        var _first_num = _num.substr(0, 1);
                        var _second_num = _num.substr(1, 2);
                        _string += _arr_numbers[2][_first_num] + ' ' + _arr_numbers[1][_second_num] + ' ';
                }              
                switch (_desc){
                        case 0:
                                var _last_num = parseFloat(_num.substr(-1));
                                if (_last_num == 1) _string += 'рубль';
                                else if (_last_num > 1 && _last_num < 5) _string += 'рубля';
                                else _string += 'рублей';
                                break;
                        case 1:
                                var _last_num = parseFloat(_num.substr(-1));
                                if (_last_num == 1) _string += 'тысяча ';
                                else if (_last_num > 1 && _last_num < 5) _string += 'тысячи ';
                                else _string += 'тысяч ';
                                _string = _string.replace('один ', 'одна ');
                                _string = _string.replace('два ', 'две ');
                                break;
                        case 2:
                                var _last_num = parseFloat(_num.substr(-1));
                                if (_last_num == 1) _string += 'миллион ';
                                else if (_last_num > 1 && _last_num < 5) _string += 'миллиона ';
                                else _string += 'миллионов ';
                                break;
                        case 3:
                                var _last_num = parseFloat(_num.substr(-1));
                                if (_last_num == 1) _string += 'миллиард ';
                                else if (_last_num > 1 && _last_num < 5) _string += 'миллиарда ';
                                else _string += 'миллиардов ';
                                break;
                }
                _string = _string.replace('  ', ' ');
                return _string;
        }
        function decimals_parser(_num) {
                var _first_num = _num.substr(0, 1);
                var _second_num = parseFloat(_num.substr(1, 2));
                var _string = ' ' + _first_num + _second_num;
                if (_second_num == 1) _string += ' копейка';
                else if (_second_num > 1 && _second_num < 5) _string += ' копейки';
                else _string += ' копеек';
                return _string;
        }
        if (!_number || _number == 0) return false;
        if (typeof _number !== 'number') {
                _number = _number.replace(',', '.');
                _number = parseFloat(_number);
                if (isNaN(_number)) return false;
        }
        _number = _number.toFixed(2);
        if(_number.indexOf('.') != -1) {
                var _number_arr = _number.split('.');
                var _number = _number_arr[0];
                var _number_decimals = _number_arr[1];
        }
        var _number_length = _number.length;
        var _string = '';
        var _num_parser = '';
        var _count = 0;
        for (var _p = (_number_length - 1); _p >= 0; _p--) {
                var _num_digit = _number.substr(_p, 1);
                _num_parser = _num_digit +  _num_parser;
                if ((_num_parser.length == 3 || _p == 0) && !isNaN(parseFloat(_num_parser))) {
                        _string = number_parser(_num_parser, _count) + _string;
                        _num_parser = '';
                        _count++;
                }
        }
        if (_number_decimals) _string += decimals_parser(_number_decimals);
        return _string;
}
Ответ написан
Для преобразования в google таблицах
цифр/чисел/суммы в текст/буквы/слова,
можно использовать код приведенный ниже:
spoiler
SUBSTITUTE(PROPER(INDEX({""\"стоz"\"двестиz"\"тристаz"\"четырестаz"\"пятьсотz"\"шестьсотz"\"семьсотz"\"восемьсотz"\"девятьсотz"};MID(TEXT(A1;"000000000000.00");1;1)+1)&INDEX(IF({"";1;"двадцатьz";"тридцатьz";"сорокz";"пятьдесятz";"шестьдесятz";"семьдесятz";"восемьдесятz";"девяностоz"}=1;{"десятьz"\"одиннадцатьz"\"двенадцатьz"\"тринадцатьz"\"четырнадцатьz"\"пятнадцатьz"\"шестнадцатьz"\"семнадцатьz"\"восемнадцатьz"\"девятнадцатьz"};{"";1;"двадцатьz";"тридцатьz";"сорокz";"пятьдесятz";"шестьдесятz";"семьдесятz";"восемьдесятz";"девяностоz"}&{""\"одинz"\"дваz"\"триz"\"четыреz"\"пятьz"\"шестьz"\"семьz"\"восемьz"\"девятьz"});MID(TEXT(A1;"000000000000.00");2;1)+1;MID(TEXT(A1;"000000000000.00");3;1)+1)&IF(-MID(TEXT(A1;"000000000000.00");1;3);"миллиард"&VLOOKUP(MID(TEXT(A1;"000000000000.00");3;1)*AND(MID(TEXT(A1;"000000000000.00");2;1)-1);{0\"овz";1\"z";2\"аz";5\"овz"};2);"")&INDEX({""\"стоz"\"двестиz"\"тристаz"\"четырестаz"\"пятьсотz"\"шестьсотz"\"семьсотz"\"восемьсотz"\"девятьсотz"};MID(TEXT(A1;"000000000000.00");4;1)+1)&INDEX(IF({"";1;"двадцатьz";"тридцатьz";"сорокz";"пятьдесятz";"шестьдесятz";"семьдесятz";"восемьдесятz";"девяностоz"}=1;{"десятьz"\"одиннадцатьz"\"двенадцатьz"\"тринадцатьz"\"четырнадцатьz"\"пятнадцатьz"\"шестнадцатьz"\"семнадцатьz"\"восемнадцатьz"\"девятнадцатьz"};{"";1;"двадцатьz";"тридцатьz";"сорокz";"пятьдесятz";"шестьдесятz";"семьдесятz";"восемьдесятz";"девяностоz"}&{""\"одинz"\"дваz"\"триz"\"четыреz"\"пятьz"\"шестьz"\"семьz"\"восемьz"\"девятьz"});MID(TEXT(A1;"000000000000.00");5;1)+1;MID(TEXT(A1;"000000000000.00");6;1)+1)&IF(-MID(TEXT(A1;"000000000000.00");4;3);"миллион"&VLOOKUP(MID(TEXT(A1;"000000000000.00");6;1)*AND(MID(TEXT(A1;"000000000000.00");5;1)-1);{0\"овz";1\"z";2\"аz";5\"овz"};2);"")&INDEX({""\"стоz"\"двестиz"\"тристаz"\"четырестаz"\"пятьсотz"\"шестьсотz"\"семьсотz"\"восемьсотz"\"девятьсотz"};MID(TEXT(A1;"000000000000.00");7;1)+1)&INDEX(IF({"";1;"двадцатьz";"тридцатьz";"сорокz";"пятьдесятz";"шестьдесятz";"семьдесятz";"восемьдесятz";"девяностоz"}=1;{"десятьz"\"одиннадцатьz"\"двенадцатьz"\"тринадцатьz"\"четырнадцатьz"\"пятнадцатьz"\"шестнадцатьz"\"семнадцатьz"\"восемнадцатьz"\"девятнадцатьz"};{"";1;"двадцатьz";"тридцатьz";"сорокz";"пятьдесятz";"шестьдесятz";"семьдесятz";"восемьдесятz";"девяностоz"}&{""\"однаz"\"двеz"\"триz"\"четыреz"\"пятьz"\"шестьz"\"семьz"\"восемьz"\"девятьz"});MID(TEXT(A1;"000000000000.00");8;1)+1;MID(TEXT(A1;"000000000000.00");9;1)+1)&IF(-MID(TEXT(A1;"000000000000.00");7;3);VLOOKUP(MID(TEXT(A1;"000000000000.00");9;1)*AND(MID(TEXT(A1;"000000000000.00");8;1)-1);{0\"тысячz";1\"тысячаz";2\"тысячиz";5\"тысячz"};2);"")&INDEX({""\"стоz"\"двестиz"\"тристаz"\"четырестаz"\"пятьсотz"\"шестьсотz"\"семьсотz"\"восемьсотz"\"девятьсотz"};MID(TEXT(A1;"000000000000.00");10;1)+1)&INDEX(IF({"";1;"двадцатьz";"тридцатьz";"сорокz";"пятьдесятz";"шестьдесятz";"семьдесятz";"восемьдесятz";"девяностоz"}=1;{"десятьz"\"одиннадцатьz"\"двенадцатьz"\"тринадцатьz"\"четырнадцатьz"\"пятнадцатьz"\"шестнадцатьz"\"семнадцатьz"\"восемнадцатьz"\"девятнадцатьz"};{"";1;"двадцатьz";"тридцатьz";"сорокz";"пятьдесятz";"шестьдесятz";"семьдесятz";"восемьдесятz";"девяностоz"}&{""\"одинz"\"дваz"\"триz"\"четыреz"\"пятьz"\"шестьz"\"семьz"\"восемьz"\"девятьz"});MID(TEXT(A1;"000000000000.00");11;1)+1;MID(TEXT(A1;"000000000000.00");12;1)+1));"z";" ")&IF(TRUNC(TEXT(A1;"000000000000.00"));"";"Ноль ")&


Обязательно выберите валюту. Просто скопируйте нужный код валюты в конец основного (приведенного выше).

Рубли:
"грив"&VLOOKUP(MOD(MAX(MOD(MID(TEXT(A1;"000000000000.00");11;2)-11;100);9);10);{0\"на ";1\"ны ";4\"ен "};2)&RIGHT(TEXT(A1;"000000000000.00");2)&" копе"&VLOOKUP(MOD(MAX(MOD(RIGHT(TEXT(A1;"000000000000.00");2)-11;100);9);10);{0\"йка";1\"йки";4\"ек"};2)


Гривны:
"рубл"&VLOOKUP(MOD(MAX(MOD(MID(TEXT(A1;"000000000000.00");11;2)-11;100);9);10);{0\"ь ";1\"я ";4\"ей "};2)&RIGHT(TEXT(A1;"000000000000.00");2)&" копе"&VLOOKUP(MOD(MAX(MOD(RIGHT(TEXT(A1;"000000000000.00");2)-11;100);9);10);{0\"йка";1\"йки";4\"ек"};2)


Для перевода на украинский язык используйте штатный переводчик:
=GOOGLETRANSLATE(код приведенный выше; "ru"; "uk")

Введите цифру в ячейку A1
и наслаждайтесь результатом.
Ответ написан
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
Можно использовать аддон для Таблиц NUMBERTEXT

5d9c015768e80721417047.png

Число прописью в текущей локале

=NUMBERTEXT(1) // one

Число прописью в русской локале

=NUMBERTEXT(1;"ru") // один

Число прописью в украинской локале

=NUMBERTEXT(1;"uk") // один

Число в заданной валюте прописью в текущей локале

=MONEYTEXT(1; "USD"; "uk") // Один долар США
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
honor8
@honor8
Принципы быстродействия VBA в описании
@Vadim7403
Вот скрипт для украинского языка (українською мовою)
// открываем Інструменти-Редактор сценаріїв, вставляємо, зберігаємо на свій диск
--------------------------------
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(" ");
}
Ответ написан
@aln2187
Подскажите как изменить код, чтобы вторая часть "копейки" , так же текстом была?
Ответ написан
Комментировать
@3dinukraine
для гривні українською
клітинка H18
=SUBSTITUTE(PROPER(INDEX({""\"стоz"\"двістіz"\"тристаz"\"чотиристаz"\"пятсотz"\"шістсотz"\"сімсотz"\"вісімсотz"\"девятсотz"};MID(TEXT(H18;"000000000000.00");1;1)+1)&INDEX(IF({"";1;"двадцятьz";"тридцятьz";"сорокz";"пятьдесятz";"шестьдесятz";"сімдесятz";"вісімьдесятz";"девяностоz"}=1;{"десятьz"\"одиннадцятьz"\"двінадцятьz"\"тринадцятьz"\"чотирнадцятьz"\"пятнадцятьz"\"шістнадцятьz"\"сімнадцятьz"\"вісімнадцятьz"\"дев'ятнадцятьz"};{"";1;"двадцятьz";"тридцятьz";"сорокz";"п'ятдесятz";"шістдесятz";"сімдесятz";"вісімдесятz";"дев'яностоz"}&{""\"одинz"\"дваz"\"триz"\"чотириz"\"п'ятьz"\"шістьz"\"сімz"\"вісімz"\"дев'ятьz"});MID(TEXT(H18;"000000000000.00");2;1)+1;MID(TEXT(H18;"000000000000.00");3;1)+1)&IF(-MID(TEXT(H18;"000000000000.00");1;3);"мільярд"&VLOOKUP(MID(TEXT(H18;"000000000000.00");3;1)*AND(MID(TEXT(H18;"000000000000.00");2;1)-1);{0\"івz";1\"z";2\"аz";5\"івz"};2);"")&INDEX({""\"стоz"\"двістіz"\"тристаz"\"чотиристаz"\"п'ятьсотz"\"шістьсотz"\"сімсотz"\"вісімсотz"\"дев'ятьсотz"};MID(TEXT(H18;"000000000000.00");4;1)+1)&INDEX(IF({"";1;"двадцятьz";"тридцятьz";"сорокz";"п'ятдесятz";"шістдесятz";"сімдесятz";"вісімдесятz";"дев'яностоz"}=1;{"десятьz"\"одинадцятьz"\"дванадцятьz"\"тринадцятьz"\"чотирнадцятьz"\"п'ятнадцятьz"\"шістнадцятьz"\"сімнадцятьz"\"вісімнадцятьz"\"дев'ятнадцятьz"};{"";1;"двадцятьz";"тридцятьz";"сорокz";"п'ятдесятz";"шістдесятz";"сімдесятz";"вісімдесятz";"дев'яностоz"}&{""\"одинz"\"дваz"\"триz"\"чотириz"\"п'ятьz"\"шістьz"\"сімz"\"вісімz"\"дев'ятьz"});MID(TEXT(H18;"000000000000.00");5;1)+1;MID(TEXT(H18;"000000000000.00");6;1)+1)&IF(-MID(TEXT(H18;"000000000000.00");4;3);"мільйон"&VLOOKUP(MID(TEXT(H18;"000000000000.00");6;1)*AND(MID(TEXT(H18;"000000000000.00");5;1)-1);{0\"івz";1\"z";2\"аz";5\"івz"};2);"")&INDEX({""\"стоz"\"двістіz"\"тристаz"\"чотиристаz"\"п'ятьсотz"\"шістьсотz"\"сімсотz"\"вісімсотz"\"дев'ятьсотz"};MID(TEXT(H18;"000000000000.00");7;1)+1)&INDEX(IF({"";1;"двадцятьz";"тридцятьz";"сорокz";"п'ятдесятz";"шістдесятz";"сімдесятz";"вісімдесятz";"дев'яностоz"}=1;{"десятьz"\"одинадцятьz"\"дванадцятьz"\"тринадцятьz"\"чотирнадцятьz"\"п'ятнадцятьz"\"шістнадцятьz"\"сімнадцятьz"\"вісімнадцятьz"\"дев'ятнадцятьz"};{"";1;"двадцятьz";"тридцятьz";"сорокz";"п'ятдесятz";"шістдесятz";"сімдесятz";"вісімдесятz";"дев'яностоz"}&{""\"однаz"\"дваz"\"триz"\"чотириz"\"п'ятьz"\"шістьz"\"сімz"\"вісімz"\"дев'ятьz"});MID(TEXT(H18;"000000000000.00");8;1)+1;MID(TEXT(H18;"000000000000.00");9;1)+1)&IF(-MID(TEXT(H18;"000000000000.00");7;3);VLOOKUP(MID(TEXT(H18;"000000000000.00");9;1)*AND(MID(TEXT(H18;"000000000000.00");8;1)-1);{0\"тисячz";1\"тисячаz";2\"тисячіz";5\"тисячz"};2);"")&INDEX({""\"стоz"\"двістіz"\"тристаz"\"чотиристаz"\"п'ятьсотz"\"шістьсотz"\"сімсотz"\"вісімсотz"\"дев'ятьсотz"};MID(TEXT(H18;"000000000000.00");10;1)+1)&INDEX(IF({"";1;"двадцятьz";"тридцятьz";"сорокz";"п'ятдесятz";"шістдесятz";"сімдесятz";"вісімдесятz";"дев'яностоz"}=1;{"десятьz"\"одинадцятьz"\"дванадцятьz"\"тринадцятьz"\"чотирнадцятьz"\"п'ятнадцятьz"\"шістнадцятьz"\"сімнадцятьz"\"вісімнадцятьz"\"дев'ятнадцятьz"};{"";1;"двадцятьz";"тридцятьz";"сорокz";"п'ятдесятz";"шістдесятz";"сімдесятz";"вісімдесятz";"дев'яностоz"}&{""\"одинz"\"дваz"\"триz"\"чотириz"\"п'ятьz"\"шістьz"\"сімz"\"вісімz"\"дев'ятьz"});MID(TEXT(H18;"000000000000.00");11;1)+1;MID(TEXT(H18;"000000000000.00");12;1)+1));"z";" ")&IF(TRUNC(TEXT(H18;"000000000000.00"));"";"Нуль ")&"грив"&VLOOKUP(MOD(MAX(MOD(MID(TEXT(H18;"000000000000.00");11;2)-11;100);9);10);{0\"ня ";1\"ні ";4\"ень "};2)&RIGHT(TEXT(H18;"000000000000.00");2)&" копі"&VLOOKUP(MOD(MAX(MOD(RIGHT(TEXT(H18;"000000000000.00");2)-11;100);9);10);{0\"йка";1\"йки";4\"йок"};2)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы