【发布时间】:2011-03-16 01:23:20
【问题描述】:
我正在使用 Google 脚本来实现一些 Google 电子表格的魔法,而自动日期解析让我抓狂!我正在使用的工作表中到处都是各种日期格式,我更愿意将它们作为字符串处理,而不是让谷歌在每个 .getValues() 调用中将它们转换为 Date 对象。经过大量搜索,我仍然找不到阻止/禁用 Google 自动解析这些字符串的方法。有谁知道怎么做?
【问题讨论】:
标签: javascript google-apps-script
我正在使用 Google 脚本来实现一些 Google 电子表格的魔法,而自动日期解析让我抓狂!我正在使用的工作表中到处都是各种日期格式,我更愿意将它们作为字符串处理,而不是让谷歌在每个 .getValues() 调用中将它们转换为 Date 对象。经过大量搜索,我仍然找不到阻止/禁用 Google 自动解析这些字符串的方法。有谁知道怎么做?
【问题讨论】:
标签: javascript google-apps-script
是的,这是可能的,但您必须在调用 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()
【讨论】: