Отформатируйте ячейку Google Таблицы в текстовом виде с помощью приложений Script
Используя Google Apps Script, я хочу установить формат для ячейки Google Таблиц для обычного текста.
Я хочу сделать это потому, что хочу показать дату в формате даты США (MM/DD/YYYY). [Мы можем предположить, что локаль в учетной записи OP Google настроена на использование DD/MM/YYYY, более общего формата даты. Ред.]
Я создаю строку следующим образом:
var thisDate = Utilities.formatDate (new Date (), SpreadsheetApp.getActiveSpreadsheet (). getSpreadsheetTimeZone (), "MM / d / yyyy");
... который возвращает дату в формате США, 06/13/2012, что я и хочу. Однако, когда я устанавливаю значение ячейки для этой строки:
sheet.getRange (1, n). setValue (thisDate);
... дата форматируется в ячейку в соответствии с моей локалью, 13/06/2012, а не в формате США.
Следующая операция также терпит неудачу, потому что дата возвращается в стандартном формате, а не в формате U.S.:
sheet.getRange (1, n). getValue () == "06/13/2012"
Когда ячейка форматируется как обычный текст, а не дата, все работает нормально.
Итак, мой вопрос заключается в том, как форматировать ячейку с помощью JavaScript.
Ответы
Ответ 1
Другой ответ, чтобы установить формат "plain text" в javascript, не работает. Однако это делает:
sheet.getRange(1,n).setNumberFormat('@[email protected]');
Таким образом, магическим значением для форматирования текста является "@STRING @"!
Ответ 2
Дополнение к христианскому хорошему ответу:
Я заметил, что если ваша целевая ячейка уже установлена в текстовый формат (вручную), установите значение с помощью range.setValue()
который не может быть интерпретирован как текст (например, дата или номер), автоматически изменит формат номера.
Поэтому хорошее решение, если вы хотите, чтобы сохранить текстовый формат,
range.setValue( "01293849847" ) NumberFormat ( "@" );.
а не
range.numberFormat( "@" ) SetValue ( "01293849847" );.
Ответ 3
Другой способ принудительно сохранить значение в виде обычного текста:
Подготовить кавычку: '
. Это не влияет на отображаемое значение, а также путем считывания значения
назад знак четности не включен.
let dateStr = '07-07-20017';
sheet.getRange(x, y).setValue("'" + dateStr);
let backStr = sheet.getRange(x, y).getValue();
assert(dateStr === backStr);
Ответ 4
К сожалению, текст плана не подходит. Документ, как только ячейка получит что-то вроде даты, просто отформатируйте ячейку.
Найден способ не создавать дату)
var thisDate1 = Utilities.formatDate (new Date (), SpreadsheetApp.getActiveSpreadsheet (). getSpreadsheetTimeZone (), "MM//d//yyyy");
Извините, так поздно ответ. Все руки не доходили.
Ответ 5
Я сделал это, как показано ниже, и он работает так, как я ожидал. В моем столбце B отображается нулевое заполненное 3-значное число (например, 004), а мой столбец C показывает правильное нулевое заполненное 10-значное число (например, 0060000001) в виде текстов. Я загрузил файл, который он преобразовал в Excel, в виде текстов с заполненными нулями. Я думаю, что это будет трюк с датой как текст.
. winSS.getRange( "! US B2: B" ). SetNumberFormat ( "000" ) setNumberFormat ( "@" );
winSS.getRange( "! США C2: C" ).. setNumberFormat ( "0000000000" ) setNumberFormat ( "@" );