使用循环通过Google Apps脚本在Google表单中创建选项

时间:2016-04-26 17:48:03

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

我有以下代码

function updateFormTwo() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Form 1 Responses");
var range = sheet.getDataRange();
var lastRow = range.getLastRow();
var values = range.getValues();
var i = 0;
var dropdown = [[0,0,0]];
var dd = [];
var ddarray = [];

var form = FormApp.openById("1w-IrMmda....0etp5gW-sfAk");
var item = form.getItems();
Logger.log(item);
var list = item[0].asListItem();
var j = 0;

for (i=0; i < lastRow-1; i++){

dropdown[i][0] = values[i+1][1];
dropdown[i][1] = values[i+1][9];
dropdown[i][2] = values[i+1][10];
dd[i] = dropdown[i][0] + " - " + dropdown[i][1] + " - " + dropdown[i][2];
ddarray.push( list.createChoice( dd[i] ) );

}

list.setChoices([ddarray]);
}

我试图从Google电子表格中获取每行3个单元格,将它们连接起来,然后将它们全部显示在另一个Google表单的下拉菜单中。我差不多了。

我得到的错误是

  

无法将数组转换为选择[]。

我有什么不对?感谢

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。

function updateFormTwo() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Form 1 Responses");
var range = sheet.getDataRange();
var lastRow = range.getLastRow();
var values = range.getValues();
var i = 0;
var j = 0;

//create 2D Array
var dropdown = new Array();

for (i = 0; i < lastRow - 1; i++){

dropdown[i] = new Array();

for (j = 0; j < 3; j++){

 dropdown[i][j] = 0; 

}

}

var dd = [];

var form = FormApp.openById("1w-IrMmdaY...gW-sfAk");
var item = form.getItems();

var list = item[0].asListItem();

for (i = 0; i < lastRow - 1; i++){

dropdown[i][0] = values[i+1][1];
dropdown[i][1] = values[i+1][9];
dropdown[i][2] = values[i+1][10];
dd[i] = dropdown[i][0] + " - " + dropdown[i][1] + " - " + dropdown[i][2];

}

Logger.log(dd);

list.setChoiceValues(dd);
}

首先,我删除了ddarray变量并在第二个for循环中使用了list.setChoiceValues(dd);而不是ddarray.push( list.createChoice( dd[i] ) ),然后list.setChoices([ddarray]);

之后,我创建了for循环,为数组提供了精确的尺寸。我注意到,当我有正确的数组维度时,我的第一个修复工作正常,因此我需要一个循环来创建精确的尺寸,因为行数增加了。