无法使用单元格值

时间:2016-07-12 05:09:58

标签: javascript google-apps-script google-sheets

我正试图从类型为“时间”的单元格中获取值。

在表格中,它看起来就像:“ 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的双引号中。 如何从单元格中获取字符串值?看起来很简单,但我花了一整夜的时间试图弄错了什么。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

要将数据转换为字符串,您可以使用.toString()

cell.toString().match(..:..)

请注意,cellDate个对象。这就是为什么它不支持.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的最佳方法。