Я использую Google Scripts для некоторой магии Google Spreadsheets, и автоматический синтаксический анализ даты сводит меня с ума! Лист, с которым я работаю, завален всевозможными форматами даты, и я бы предпочел рассматривать их как строки, чем заставлять Google конвертировать их в объекты Date с каждым вызовом .getValues (). После долгих поисков я все еще не могу найти способ остановить / отключить Google от автоматического анализа этих строк. Кто-нибудь знает как?
Отключить автоматический анализ даты с помощью скриптов Google
Ответы (2)
Да, это возможно, но вы должны внести изменения перед вызовом 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()