设置表单响应目标的问题(可能是getID()函数的问题)

时间:2014-02-24 19:43:10

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


注意:此问题已引起谷歌开发者的注意,他们显然正在考虑解决这个问题。目前还没有解决方案,please see here如果此问题也会影响您!


我在google脚本中使用了一个小项目一段时间,我运行了我的脚本并收到了“无法设置响应目标。验证目标ID并重试。”错误。这发生在我的代码的一部分中,其中各种表单都生成了相应的响应电子表格,错误在第一个.setDestination()调用时触发:

responseSheet =  SpreadsheetApp.create('ConflictRespData for ' + activeRef.refereePi);
moveToFolder(DocsList.getFileById(responseSheet.getId()), conflictFolder);
Logger.log(responseSheet.getId());

conflForm = FormApp.create('Conflict Declerations for ' + activeRef.refereePi);
moveToFolder(DocsList.getFileById(conflForm.getId()), conflictFolder);
conflForm.setDescription(FORM_DESCRIPTION)
         .setConfirmationMessage(CONFIRMATION_MESSAGE)
         .setAllowResponseEdits(false)
         .setShowLinkToRespondAgain(false)
conflForm.setDestination(FormApp.DestinationType.SPREADSHEET, responseSheet.getId());

我的代码在我上次使用它2天前工作正常并且今天运行它没有编辑我现在收到此错误的任何内容。这让我相信这是谷歌方面的错误,而不是我自己的语法。

我在创建后使用Logger来打印responseSheet的.getId(),并注意到当我通过我的Google云端硬盘导航到电子表格时,此字符串与地址栏中显示的字符串不匹配,但是粘贴此代替实际ID的ID会将我带到电子表格中。我的印象是Id必须是唯一的。

我创建了一个新脚本,它(基本上)是GAS文档中Class Form page上示例脚本的精确副本,以支持我怀疑这是谷歌方面的问题:

function myFunction() {
  var form = FormApp.openById('1ib3j66ogj3NgozVDeYxhNdqm6PaajUhN3dk24BXcd7s');
  var ss = SpreadsheetApp.create('Spreadsheet Name');

  // Update form properties via chaining.
  form.setTitle('Form Name')
     .setDescription('Description of form')
     .setConfirmationMessage('Thanks for responding!')
     .setAllowResponseEdits(true)
     .setAcceptingResponses(false);

 // Update the form's response destination.
 form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
}

是的,实际上我仍然收到相同的错误消息,并且打印到日志时电子表格的ID与浏览器导航栏中的Id不匹配。

我希望对这个问题的本质有所了解,或者如果我在这里做错了什么(虽然完全相同的代码之前是有效的,所以我倾向于不这样认为)。如果你能提供任何可能很棒的帮助,我就无法在不处理这个问题的情况下取得进一步的进展。