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

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


person Gaurav Dadhania    schedule 16.03.2011    source источник


Ответы (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.

person mwag    schedule 11.07.2019

Это действительно невозможно, но возможный обходной путь - создать вспомогательный лист и вставить формулу для объединения всех значений на исходном листе с пустой строкой. Затем getValues() на этом вспомогательном листе, который может быть скрыт или удален сценарием после использования.

Формула может быть такой же простой, как установка ее на A1 вспомогательного листа.

=ArrayFormula(Sheet1!A:T&"")

Предостережение, связанное с этим обходным путем, заключается в том, что, если пользователь установил пользовательское форматирование для своих дат, они не будут сохранены. Но если это важно, вы можете получить их, используя getNumberFormats()

person Henrique G. Abreu    schedule 02.12.2011