4

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

4

2 回答 2

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中描述的技术

于 2019-07-11T20:44:49.503 回答
0

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

公式可以简单到在辅助表的 A1 上设置

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

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

于 2011-12-02T00:22:57.463 回答