1

我已经尝试了下面代码的多次迭代,但成功有限。记录器似乎正确显示了命令,但表单似乎没有执行命令。执行后,表单只生成一个未定义的复选框。

鉴于我必须多次重复此复选框问题,问题措辞略有不同,我正在尝试减少我的代码占用空间,并希望变得更有效率。

这是我失败的代码片段:

    var storerangestart = 9901;
    var storerangeend = 9999;
    page402_cbitem1.setTitle('What stores do you have allocated for this project?');
    var page402array = 'page402_cbitem1.setChoices([\n';
    for (var i = storerangestart; i < storerangeend; i++) {
      var storerangecurrent = i + "";
      page402array += 'page402_cbitem1.createChoice(' + storerangecurrent + '),\n';
    }
    page402array += 'page402_cbitem1.createChoice(' + storerangeend + ')\n]);';
    Logger.log(page402array);
    page402array();
4

1 回答 1

3

记录器没有向您显示命令,而是向您显示一个字符串。您的代码创建了一个字符串,其中包含看起来像代码的文本,但无法直接在 Google Apps 脚本中执行该字符串的内容。

你有一个好主意——你只是被困在试图处理错误的对象类型。

查看 的定义CheckboxItem.setChoices(),您会看到它以一系列选择作为参数。示例代码可能会让您感到困惑,因为它在.setChoices()方法调用中创建了 item 元素:

item.setChoices([
    item.createChoice('Cats'),
    item.createChoice('Dogs')
]);

您可以通过这种方式实现相同的结果:

var choices = [];                           // create a new array of choices
choices.push( item.createChoice('Cats') );  // Add 'Cats'
choices.push( item.createChoice('Dogs') );  // Add 'Dogs'
item.setChoices( choices );                 // set the array of choices

这为您正在考虑的循环设置了机会。您需要调用各种对象方法来首先构建一个选项数组,然后将该数组分配为表单项的选项,而不是构建一个包含代码的字符串:

var storerangestart = 9901;
var storerangeend = 9999;
page402_cbitem1.setTitle('What stores do you have allocated for this project?');
var page402array = [];
for (var i = storerangestart; i < storerangeend; i++) {
  var storerangecurrent = i + "";
  page402array.push( page402_cbitem1.createChoice( storerangecurrent ) );
}
Logger.log( page402array );
page402_cbitem1.setChoices( page402array );
于 2013-06-21T01:30:37.917 回答