【问题标题】:Disable automatic date parsing with Google Scripts使用 Google 脚本禁用自动日期解析
【发布时间】:2011-03-16 01:23:20
【问题描述】:

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

【问题讨论】:

    标签: javascript google-apps-script


    【解决方案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

    中描述的技术

    【讨论】:

      【解决方案2】:

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

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

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

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

      获取它们

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-19
        • 1970-01-01
        • 1970-01-01
        • 2016-02-07
        • 1970-01-01
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多