ДлинаТекстаВПикселях для Google Docs (update от 03-12-2020)

ДлинаТекстаВПикселях для Google Docs (update от 03-12-2020)
Евгений Юдин

Привет, коллеги!

Я перенес в Google Docs свою функцию для расчета длины текста в пикселях.

Подборнее о том, зачем эта функция нужна, читайте в статье:

Второй заголовок в Яндекс.Директ. Почему он пропадает и как это исправить? (обновлено 14-08-18)

Чтобы установить функцию в вашу табличку в Google Spreadsheet, заходим в «Инструменты» => «Редактор скриптов».

Автоматически будет создан новый файл скрипта. Удаляем текст, который в нем присутствует.

И вставляем код функции.

Обновил код функции 3 декабря 2020:

  • добавил подсказки для простоты заполнения
  • добавил дополнительные символы, учитываемые при расчете ширины в пикселях
  • произвел более точные расчеты ширины (до 6 знаков после запятой)

 

/**
* Возвращает длину текста в пикселях (для расчета возможности показа второго заголовка в выдаче Директа).
*
* @param {string} str Текст, длину которого нужно вычислить.
* @param {boolean} bold (необязательно) Является ли текст жирным. По-умолчанию false.
* @return Длина текста в пикселях для расчета возможности показа второго заголовка в выдаче Директа.
* @customfunction
*/
function ДлинаТекстаВПикселях(str, bold = false) {
if (bold === undefined) {
bold = false;
}

arr1 = ["а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к",
"л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ",
"ъ", "ы", "ь", "э", "ю", "я", "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З",
"И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц",
"Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я", "A", "B", "C", "D", "E", "F",
"G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U",
"V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y",
"z", "Ґ", "ґ", "Є", "є", "І", "і", "Ї", "ї", "1", "2", "3", "4", "5", "6",
"7", "8", "9", "0", "`", "!", ".", ",", ":", ";", "?", "-", "_", "\"", "$",
"%", "&", "(", ")", "*", "«", "»", "№", "+", "=", "–", " ", "/", "|", ">",
"<", "~", "²", "³", "©", "®", "’", "°", "₽", "™"];

if (!!bold == true) {
arr2 = [10, 11.109375, 11.0625, 7.484375, 11.421875, 10, 10, 12.75, 8.9375,
11.0625, 11.0625, 9, 11.421875, 13.3125, 10.859375, 10.984375, 10.859375,
10.984375, 10, 8.8125, 10, 15.75, 10, 11.0625, 10.4375, 15, 15.1875,
13.109375, 15.359375, 11.0625, 9.9375, 15.359375, 10.5, 12.984375,
12.9375, 12.984375, 10.203125, 12.8125, 12, 12.03125, 16.265625,
11.265625, 12.9375, 12.9375, 10.984375, 12.625, 14.984375, 12.984375,
14, 12.9375, 12, 12.984375, 10.984375, 11.1875, 15.359375, 12, 13.140625,
12.640625, 18.078125, 18.328125, 15.640625, 17.609375, 12.9375,
12.796875, 18.5625, 12.9375, 12.984375, 12.984375, 12.984375, 12.984375,
12, 10.984375, 14, 12.984375, 5, 10, 12.984375, 10.984375, 14.984375,
12.984375, 14, 12, 14, 12.984375, 12, 10.984375, 12.984375, 12, 16.984375,
12, 12, 10.984375, 10, 10.984375, 10, 10.984375, 10, 5.984375, 10.984375,
10.984375, 5, 5, 10, 5, 16, 10.984375, 10.984375, 10.984375, 10.984375,
7, 10, 5.984375, 10.984375, 10, 14, 10, 10, 9, 8.75, 8.03125, 12.796875,
9.9375, 5, 5, 4.953125, 5.0625, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5.984375,
5.984375, 5, 5, 5.984375, 5.984375, 10.984375, 5.984375, 10, 8.53125, 10, 16,
12.984375, 5.984375, 5.984375, 7, 10, 10, 20.0625, 10.5, 10.5, 10, 5, 5, 5.03125,
10.5, 10.5, 10.5, 10.984375, 10.984375, 13.25, 13.25, 5, 7.1875, 10.984375, 18];
} else {
arr2 = [10, 10.296875, 9.5625, 6.5625, 10.5, 10, 10, 12.03125, 8.25, 10.046875, 10.046875,
7.875, 10.5, 12.375, 9.9375, 10, 9.734375, 10, 9, 8.234375, 9, 14.796875, 9, 10.296875,
9.375, 14.4375, 14.796875, 11.25, 12.9375, 9.375, 9.171875, 13.5, 9.734375, 12,
11.8125, 12, 9.734375, 12.1875, 12, 12, 16.609375, 10.859375, 12.9375, 12.9375,
10.484375, 11.8125, 14.984375, 12.984375, 14, 12.9375, 12, 12.984375, 10.984375,
11.421875, 13.671875, 12, 13.3125, 11.984375, 16.484375, 16.875, 14.234375,
15.921875, 11.8125, 12.9375, 18.171875, 12.984375, 12, 12, 12.984375, 12.984375,
12, 10.984375, 14, 12.984375, 5, 9, 12, 10, 14.984375, 12.984375, 14, 12, 14,
12.984375, 12, 10.984375, 12.984375, 12, 16.984375, 12, 12, 10.984375, 10,
10, 9, 10, 10, 5, 10, 10, 3.984375, 3.984375, 9, 3.984375, 14.984375, 10, 10,
10, 10, 5.984375, 9, 5, 10, 9, 12.984375, 9, 9, 9, 8.796875, 7.390625, 12.9375,
9.171875, 5, 3.984375, 5, 5, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5.984375, 5, 5, 5,
5, 5, 10, 5.984375, 10, 6.375, 10, 16, 12, 5.984375, 5.984375, 7, 10, 10, 19.296875,
10.5, 10.5, 10, 5, 5, 4.671875, 10.5, 10.5, 10.5, 10, 10, 13.25, 13.25, 3.984375, 7.1875, 10, 18];
}

sum = 0;
for (i = 0; i < str.length; i ++) {
for (j = 0; j < arr1.length; j++) {
if (str[i] == arr1[j]) {
sum = sum + arr2[j];
}
}
}

return sum;
}

 

Теперь в самом документе можем использовать функцию ДлинаТекстаВПикселях().

Она так же, как и функция для Excel, поддерживает параметр bold, который нужно задать как true (или ИСТИНА), если мы хотим рассчитать длину текста в пикселях с учетом того, что он будет выделен жирным шрифтом.

Всем спасибо! Надеюсь кому-нибудь пригодится =)