在Google表格脚本中输入错误

时间:2014-11-17 22:01:00

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

在Google表格脚本编辑器中,我使用下面的代码在电子表格中插入编辑响应链接以及表单数据。

function assignEditUrls() {
  var form = FormApp.openById('xxxxxxxxxxxxxxxxxxxxxxxx');
    //enter form ID here

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses');

    //Change the sheet name as appropriate
  var data = sheet.getDataRange().getValues();
  var urlCol = 3; // column number where URL's should be populated; A = 1, B = 2 etc
  var responses = form.getResponses();
  var timestamps = [], urls = [], resultUrls = [];

  for (var i = 0; i < responses.length; i++) {
    timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
    urls.push(responses[i].getEditResponseUrl());
  }
  for (var j = 1; j < data.length; j++) {
    resultUrls.push([data[j][1]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']);
  }
  sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls);  
}

虽然这个工作一直持续到上周,但是当脚本现在运行时,我收到以下错误:

TypeError: Cannot find function setMilliseconds in object . (line 18, file "Code")

任何想法或替代解决方案都会感激不尽。

3 个答案:

答案 0 :(得分:0)

此代码为我运行,没有任何问题,也没有修改,因此无论您的错误是什么,它都是临时的,或者不是脚本的这一部分。

编辑:再次尝试再次确认并且执行记录确认给我:'[14-11-18 23:17:52:820 GMT]执行成功[0.581秒]总运行时间''我看到电子表格中出现的链接没有问题。

答案 1 :(得分:0)

我也遇到过这个问题。我不知道为什么这样做有效但删除了响应下方的所有额外行并纠正了问题。

答案 2 :(得分:0)

您应该更改

for (var j = 1; j < data.length; j++) {
    resultUrls.push(['=HYPERLINK("' + [data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:''] + '","Edit")']);
  }
  sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls);

j = 1->您必须将数字1更改为具有-z-1格式的值的第一行的数字。例如,如果您在表单填写的行上方添加了更多行,假设您添加了一行,那么1应该变成2(1 + 1)。此外,最后一行中的数字2也应获得+1,因此应变为3。

我已将代码更改为此:

var pos1st = 3; // row number where the first response is located; 1 = 1, 2 = 2, etc
for (var j = pos1st-1; j < data.length; j++) {
    resultUrls.push(['=HYPERLINK("' + [data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:''] + '","Edit")']);
  }
  sheet.getRange(pos1st, urlCol, resultUrls.length).setValues(resultUrls);