Отключить автоматический анализ даты с помощью Google Scripts
-
24-10-2019 - |
Вопрос
Я использую Google Scripts для магии таблиц Google, и автоматический анализ дат сводит меня с ума!Лист, с которым я работаю, завален всевозможными форматами дат, и я бы предпочел иметь дело с ними как со строками, чем заставлять Google преобразовывать их в объекты Date при каждом вызове .getValues().После долгих поисков я до сих пор не могу найти способ остановить/отключить автоматический анализ этих строк Google.Кто-нибудь знает как?
Решение
Да, это возможно, но вы должны внести изменения до вызов getValues и используйте getDisplayValues():
// do not use getValues(), which will convert dates
var string_data = my_sheet.getRange(...).getDisplayValues();
Если вы хотите использовать отображаемое значение только в ограниченном случае, например, дат, вы можете скопировать как значения, так и отображения, а затем проверить, является ли ваше значение датой, и если это так, использовать вместо этого соответствующее отображение:
// use getDisplayValues() for dates, getValues() otherwise
var string_data = my_sheet.getRange(...).getDisplayValues();
var value_data = my_sheet.getRange(...).getValues();
value_data.forEach(function(row_vals, i) {
row.forEach(function(cell_val, j) {
if(is_date(cell_val)) // see e.g. https://stackoverflow.com/a/17110249/3160967
do_something_with(string_data(i, j));
else
do_something_with(cell_val);
});
});
Наконец, приведенное выше требует модификации, если вы хотите использовать его в качестве функции листа, поскольку вызовы функций автоматически применяют getValues() до выполнения кода функции.Чтобы обойти это, вы можете использовать методы, описанные в разделе https://webapps.stackexchange.com/a/30784
Другие советы
Это действительно невозможно, но возможным обходным решением является создание вспомогательного листа и вставка формулы для объединения всех значений исходного листа с пустой строкой.Затем getValues()
на этом вспомогательном листе, который может быть скрыт или удален сценарием после использования.
Формула может быть такой же простой, как установка ее на A1 вспомогательного листа.
=ArrayFormula(Sheet1!A:T&"")
Предостережение относительно этого обходного пути заключается в том, что если пользователь установит собственное форматирование для своих дат, они не будут сохранены.Но если это важно, вы можете получить их, используя getNumberFormats()