Отключить автоматический анализ даты с помощью Google Scripts

StackOverflow https://stackoverflow.com/questions/5319985

  •  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()

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top