Отформатируйте ячейку Google Таблицы в текстовом виде с помощью приложений Script - программирование
Подтвердить что ты не робот

Отформатируйте ячейку 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.

4b9b3361

Ответ 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 ( "@" );