const oWorksheet = Api.GetSheet("Лист1"); //Лист1 --> заменить на лист с данными
const data = oWorksheet.GetRange("A2").Value; //A2 --> адрес ячейки с числом
const data_out = oWorksheet.GetRange("B2"); //B2 адрес ячеки для вывода результата
const resultOut = (function numberToText(num) {
// Проверка на допустимый диапазон
if (Number(num) < 0 || Number(num) >= 1000000000) {
return "Ошибка: число вне допустимого диапазона (0-999999999,99)";
}
const units = [
"",
"один",
"два",
"три",
"четыре",
"пять",
"шесть",
"семь",
"восемь",
"девять",
];
const teens = [
"десять",
"одиннадцать",
"двенадцать",
"тринадцать",
"четырнадцать",
"пятнадцать",
"шестнадцать",
"семнадцать",
"восемнадцать",
"девятнадцать",
];
const tens = [
"",
"",
"двадцать",
"тридцать",
"сорок",
"пятьдесят",
"шестьдесят",
"семьдесят",
"восемьдесят",
"девяносто",
];
const hundreds = [
"",
"сто",
"двести",
"триста",
"четыреста",
"пятьсот",
"шестьсот",
"семьсот",
"восемьсот",
"девятьсот",
];
const thousandUnits = [
"",
"одна",
"две",
"три",
"четыре",
"пять",
"шесть",
"семь",
"восемь",
"девять",
];
function triadToText(triad, isThousand) {
let result = "";
if (triad >= 100) {
result += hundreds[Math.floor(triad / 100)] + " ";
triad %= 100;
}
if (triad >= 10 && triad < 20) {
result += teens[triad - 10] + " ";
} else if (triad >= 20 || triad === 10) {
result += tens[Math.floor(triad / 10)] + " ";
triad %= 10;
}
if (triad > 0 && triad < 10) {
result += (isThousand ? thousandUnits[triad] : units[triad]) + " ";
}
return result.trim();
}
function rubleDeclension(num) {
const rem100 = num % 100;
if (rem100 >= 11 && rem100 <= 14) return "рублей";
switch (num % 10) {
case 1:
return "рубль";
case 2:
case 3:
case 4:
return "рубля";
default:
return "рублей";
}
}
function thousandDeclension(num) {
const rem100 = num % 100;
if (rem100 >= 11 && rem100 <= 14) return "тысяч";
switch (num % 10) {
case 1:
return "тысяча";
case 2:
case 3:
case 4:
return "тысячи";
default:
return "тысяч";
}
}
function millionDeclension(num) {
const rem100 = num % 100;
if (rem100 >= 11 && rem100 <= 14) return "миллионов";
switch (num % 10) {
case 1:
return "миллион";
case 2:
case 3:
case 4:
return "миллиона";
default:
return "миллионов";
}
}
function kopeckDeclension(num) {
const rem100 = num % 100;
if (rem100 >= 11 && rem100 <= 14) return "копеек";
switch (num % 10) {
case 1:
return "копейка";
case 2:
case 3:
case 4:
return "копейки";
default:
return "копеек";
}
}
const intPart = Math.floor(num);
const decPart = Math.round((num - intPart) * 100);
const intPartStr = intPart.toString();
let result = "";
if (intPart === 0) {
result = "ноль рублей";
} else {
const millions = Math.floor(intPart / 1000000);
const thousands = Math.floor((intPart % 1000000) / 1000);
const hundreds = intPart % 1000;
if (millions > 0) {
result +=
triadToText(millions, false) + " " + millionDeclension(millions) + " ";
}
if (thousands > 0) {
result +=
triadToText(thousands, true) +
" " +
thousandDeclension(thousands) +
" ";
}
if (hundreds > 0) {
result += triadToText(hundreds, false) + " ";
}
result = result.trim() + " " + rubleDeclension(intPart);
}
if (decPart > 0) {
result += " " + decPart + " " + kopeckDeclension(decPart);
}
// Преобразование первой буквы в заглавную
if (result.length > 0) {
result = result.charAt(0).toUpperCase() + result.slice(1);
}
return result.trim();
})(data);
data_out.SetValue(resultOut);