我已经创建了一个Google电子表格,可以自动转换为Google表单,因此我不必手动将所有问题输入到Google表单中。
我正在编写google app脚本并设法解决所有问题。我试图根据表格的第一列将表格分为几部分。因此,如果第一列为“ 1”,则与之对应的问题应位于第一部分,如果为“ 2”,则应创建另一部分。依此类推。
我怎样才能做到这一点?代码是什么?我已经将Google工作表附加为Google电子表格
function myFunction()
{
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var range = ss.getDataRange();
var data = range.getValues();
var numberRows = range.getNumRows();
var numberColumns = range.getNumColumns();
var firstRow = 1;
var form = FormApp.openById('1hIQCLT_JGLcvjz44vXTvP5ziia6NnwCqWBxYT4h2uCk');
var items = form.getItems();
var ilength = items.length;
for (var i=0; i<items.length; i++)
{
form.deleteItem(0);
}
for(var i=0;i<numberRows;i++)
{
Logger.log(data);
var questionType = data[i][0];
if (questionType=='')
{
continue;
}
//choose the type of question from the first column of the spreadsheet
else if(questionType=='1')
{
var rowLength = data[i].length;
var currentRow = firstRow+i;
var currentRangeValues = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1').getRange(currentRow,1,1,rowLength).getValues();
var getSheetRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1').getDataRange();
var numberOfColumnsSheet = getSheetRange.getNumColumns();
var numberOfOptionsInCurrentRow = numberOfColumnsSheet;
var lastColumnInRange = String.fromCharCode(64 + (numberOfOptionsInCurrentRow));
var range_string = 'C' + currentRow + ":" + lastColumnInRange + currentRow;
var optionsArray = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1').getRange(range_string).getValues();
var choicesForQuestion =[];
for (var j=0;j<optionsArray[0].length;j++)
{
choicesForQuestion.push(optionsArray[0][j]);
}
form.addMultipleChoiceItem().setTitle(data[i][1]).setHelpText("").setChoiceValues(choicesForQuestion).setRequired(true);
}
else
{
continue;
}
}
form.addParagraphTextItem()
.setTitle('Please specify and attach relevant documents'); // add the text question at the last
form.addPageBreakItem().setTitle('Identity - Asset Management').setHelpText("")();
}
如果您想在下一节中使用完全相同的格式,则可以使用一个简单的计数器。我编写了一个成功的脚本变体,但这取决于您真正想要的是什么。
我会做的一些改变
for (i = 0; i < items.length; i++) {
form.deleteItem(items[i])
}
代替当前form.deleteItem(0);
。否则,我会看到您获取了所有数据,但是您没有使用它们。每次需要该选项时都调用电子表格应用程序会导致其运行慢得多。关于该for
循环的更多信息:将循环移到Logger.log(data);
外部。每次转到数据的下一行时,没有理由继续记录整个数据范围。或将其更改为Logger.log(data[i]);
更有意义。
您已经做了一个
if (questionType=='') {
continue;
}
跳过空白行,所以不确定最后else
的含义是什么。无论如何,循环将自行进入下一个选项。
现在,您设置的工作方式是,电子表格中的问题必须有序。那就是你不能拥有
因为这将创建3个部分,而不是2个部分。但是,让我们继续进行以下假设:电子表格将仅以如下方式设置:
在这种情况下,您应该利用自己的,data
并在循环之前的某个位置questionType
添加计数器var sectionCount = 0
。然后在for
循环中执行一个简单的操作
else if (questionType != sectionCount) {
form.addSectionHeaderItem().setTitle('Section ' + questionType)
sectionCount++
}
这将创建该部分(前提是数字在A列中始终始终增加1)。然后,在同一for
循环中,您不需要任何其他if
语句,而只需使用
items = data[i].slice(2, data[i].length + 1)
items = items.filter(chkEmpty)
form.addMultipleChoiceItem().setTitle(data[i][1]).setChoiceValues(items)
在哪里
function chkEmpty(val){
return val != ''
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句