Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Google脚本禁用自动日期解析_Javascript_Google Apps Script - Fatal编程技术网

Javascript 使用Google脚本禁用自动日期解析

Javascript 使用Google脚本禁用自动日期解析,javascript,google-apps-script,Javascript,Google Apps Script,我正在使用谷歌脚本制作一些谷歌电子表格,自动日期解析快把我逼疯了!我正在处理的工作表中充斥着各种各样的日期格式,我更愿意将它们作为字符串处理,而不是让Google通过每个.getValues()调用将它们转换为日期对象。经过多次搜索,我仍然无法找到阻止/禁用Google自动解析这些字符串的方法。有人知道怎么做吗 这确实是不可能的,但一个可行的解决方法是创建一个辅助工作表并插入一个公式,将源工作表上的所有值与一个空字符串连接起来。 然后在此辅助工作表上显示getValues(),使用后脚本可能会隐

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

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

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

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

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

获取它们,这是可能的,但是您必须在调用getValues之前进行更改,并使用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()。要解决此问题,可以使用中介绍的技术

  // 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);
    });
  });