我正试图从类型为“时间”的单元格中获取值。
在表格中,它看起来就像:“ 15:40 ”(手动填写)
如果我使用此单元格中的getValue()
,并setValue
使用其他单元格则不会有任何问题。
但是当我尝试使用regexp管理一些解析时,我收到的错误如下:
TypeError:在对象“Sun Dec 31 1899 05:22:00 GMT + 0300(MSK)”中找不到函数 match 。
这是代码本身,很简单:
...
var sheet = SpreadsheetApp.getActiveSheet();
cell = sheet.getRange(1, 1).getValue();
cellpart = cell.match(..:..);
...
Debug说类型im不是“String”,而是“Data”及其值在上面的errormessage的双引号中。 如何从单元格中获取字符串值?看起来很简单,但我花了一整夜的时间试图弄错了什么。任何帮助将不胜感激。
答案 0 :(得分:0)
要将数据转换为字符串,您可以使用.toString()
cell.toString().match(..:..)
请注意,cell
是Date
个对象。这就是为什么它不支持.match
,但你可以把它变成一个字符串,这将使它成为字符串值"Sun Dec 31 1899 05:22:00 GMT+0300 (MSK)."
。
答案 1 :(得分:0)
从工作表创建邮件合并时,我也遇到了这个问题。我没有必要匹配/搜索这些值,但此过程的第一步是将数据转换为您想要的格式。之后,您可以将其重写回单元格或从那里进行处理。
下面是我传输日期格式的方法,然后以我需要的格式将值写入数组。这有效地删除了所有额外的垃圾日期信息。一旦我有一个干净的日期,我就能够毫无问题地操纵这些数据。
var rawSubmitDate = sheet.getRange((i+2), 1, 1, 1).getValue();
var submitDate = Utilities.formatDate(rawSubmitDate, "PST", "MM/dd/yy");
第一部分与带有数据的行循环一起使用。您可以看到我使用.formatDate()
将长数据表单设置为我想要的内容。您可以在GAS参考中找到有关如何格式化所需方式的更多信息,以及有关日期格式语法的在线信息。
var lastColumn = sheet.getMaxColumns();
var dataRow = sheet.getRange((i+2), 1, 1, (lastColumn - 2));
var dataArray = dataRow.getValues();
dataArray[0][2] = whenA;
dataArray[0][25] = whenB
dataArray[0][37] = whenC;
dataArray[0][40] = whenD;
dataArray[0][43] = whenE;
dataArray[0][46] = whenF;
在本节中,我创建了一个包含所有值的数组,并将清理后的日期写入该数组。 []
值由我们行中的列索引定义。例如,第26行包含需要重新格式化的日期(whenB)。这些日期是DOB,事件发生时间等等。
我没有编写代码将这些值放回到工作表中,因为我使用QUERY()
函数来填充我拉出的工作表。将值写入QUERY()
中涉及的单元格将引发错误。但是,该过程需要嵌套循环。外循环遍历行,内循环循环遍历写入每个数据数组值的行中的列单元。外循环索引将由您拥有的行数定义;内循环索引将由您拥有的列数定义。
答案 2 :(得分:0)
尝试使用getDisplayValue(而不是getValue(。这将返回显示的单元格值,而不是基础Date值。
这是我发现提取持续时间(从Google表单中插入)而没有Date值固有的所有gobbledygook的最佳方法。