Список предустановленных форматов: здесь . Для некоторых форматов эквивалент javascript относительно прост. Для других это чрезвычайно сложно. И обработка пользовательских пользовательских форматов - удачи в этом.
Вот снимок экрана, показывающий содержимое ячейки, которая была реплицирована как html - не исправлена, как вы, но используете форматы из электронной таблицы.

Существуют вспомогательные функции скрипта Служб Google, которые облегчают задачу: Utilities.formatString()
и Utilities.formatDate()
.
Для дат и времени, таких как "h:mm:ss am/pm"
, форматы электронных таблиц - это почти то, что нужно для утилиты - я обнаружил, что вам просто нужно изменить обозначение am / pm для некоторых форматов:
var format = cell.getNumberFormat();
var jsFormat = format.replace('am/pm','a');
var jsDate = Utilities.formatDate(
date,
this.tzone,
jsFormat);
Для долларов, например "\"$\"#,##0.00"
var dollars = Utilities.formatString("$%.2f", num);
Для чисел в процентах, например "0.00%"
var matches = format.match(/\.(0*?)%/);
var fract = matches ? matches[1].length : 0; // Fractional part
var percent = Utilities.formatString("%.Xf%".replace('X',String(fract)), 100*num);
Для экспонент, таких как "0.000E+00"
, используйте встроенный javascript toExponential()
и настройте вывод, чтобы он больше походил на электронную таблицу:
if (format.indexOf('E') !== -1) {
var fract = format.match(/\.(0*?)E/)[1].length; // Fractional part
return num.toExponential(fract).replace('e','E');
}
Вы можете просто сравнить строки с сохраненными форматами электронных таблиц, чтобы выбрать правильный конвертер.
А что я имею в виду под чрезвычайно сложным? Попытайтесь получить форматтер, который придет с тем же самым выбором числителя и знаменателя, который Sheets делает для # ?/?
и # ??/??
! В электронной таблице это вопрос форматирования - в скрипте это намного больше ...