我正在使用Google脚本作为一些Google电子表格魔术,并且自动日期解析使我发疯!我与之合作的表格上有各种日期格式,我宁愿将它们作为字符串打交道,而不是让Google将它们转换为每个.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