使用Google Scripts禁用自动日期解析

时间:2011-03-16 01:23:20

标签: javascript google-apps-script

我正在使用谷歌脚本获得一些Google Spreadsheets魔法,自动日期解析让我疯狂!我正在使用的工作表中充斥着各种各样的日期格式,我更愿意将它们作为字符串处理,而不是让Google将它们转换为每个.getValues()调用的Date对象。经过多次搜索,我仍然无法找到一种方法来阻止/禁止Google自动解析这些字符串。有谁知道怎么样?

2 个答案:

答案 0 :(得分:1)

是可以的,但是您必须在 调用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

中描述的技术

答案 1 :(得分:0)

这确实不可能,但一个可行的解决方法是创建辅助工作表并插入公式以使用空字符串连接源表上的所有值。 然后在此辅助工作表上getValues(),使用后可能会被脚本隐藏或删除。

公式可以像在辅助工作表的A1上设置一样简单

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

此解决方法的一个警告是,如果用户为其日期设置自定义格式,则不会保留这些格式。但是,如果这很重要,您可以使用getNumberFormats()

来获取它们