2016-04-28 2 views
0

Я использую функцию .copyValuesToRange в скрипте Google, чтобы скопировать некоторую информацию со страницы ввода на историческую страницу в файле Google Таблиц. Одной из ячеек в скопированном диапазоне является дата, отформатированная MM/DD.copyValuesToRange change Формат даты

У меня есть две из этих входных страниц и две соответствующие исторические страницы. Когда я запускаю copyToValueRange() на первой странице ввода -> исторической странице, он копирует все значения правильно. Когда я запускаю скрипт для второй страницы, он копирует дату в формате MM/DD и преобразует ее в метку времени Microsoft (#####).

Сначала я подумал, что он помещает случайное целое число, но после небольшого поиска и помощи сайта калькулятора (http://www.silisoftware.com/tools/date.php) я обнаружил, что он фактически преобразует дату в другой формат.

Почему это происходит при одном вызове copyValuesToRange(), а не другом? Нужно ли каким-либо образом обрабатывать формат даты с помощью Utilities.formatDate()?

ответ

1

Метод copyValuesToRange выполняет то, что он обещает сделать: копии значения. В электронной таблице Google дата «4/28/2016» - это всего лишь номер 42488, который был отформатирован как дата. Таким образом, это число копируется, как было разработано.

Вы хотите скопировать оба значения и форматирование. Для этого используйте метод copyTo:

var sheet = SpreadsheetApp.getActiveSheet(); 
sheet.getRange("A1:A5").copyTo(sheet.getRange("B1:B5")); 

Метод copyValuesToRange выглядит довольно старый ко мне (он принимает параметр «gridId», который использует почти никакой другой метод). Сейчас я считаю устаревшим то, что доступно copyTo. Метод copyTo также принимает параметры, указывающие, следует ли копировать только содержимое, только форматирование или оба (по умолчанию).


И нет, вы не хотите Utilities.formatDate. Этот метод часто ошибочно принимается за устройство для форматирования электронных таблиц. Это не то, что он делает; он преобразует даты в строки.

Смежные вопросы