【发布时间】:2015-01-27 19:07:15
【问题描述】:
我正在尝试为使用电子表格创建表单的 Google 表格制作脚本。如图所示,我将工作表的列(加载到对象“dataObject”中)中的值传递到对象数组中。
for (var i = 0; i < dataObject.length; i++)
{
dataObjectArray[i] = {
question: dataObject[i][3],
type: dataObject[i][4],
help: dataObject[i][5],
choices: dataObject[i][6],
options: dataObject[i][7],
validation: dataObject[i][8]
}
}
然后我的目标是使用每个对象的“问题”属性在我的 Google 表单中创建一个新项目。我遇到的问题是,根据问题类型,制作表单需要完全不同的方法。
我尝试的第一件事是制作一个这样的函数字典:
var form = FormApp.create('Foo');
var formDictionary = {
"Text": function(){form.addTextItem();},
"Paragraph Text": function(){form.addParagraphTextItem();},
"Multiple Choice": function(){form.addMultipleChoiceItem();},
"Checkboxes" : function() {form.addCheckboxItem();},
"Choose from a list": function(){form.addListItem();},
"Scale": function(){form.addScaleItem();},
"Grid": function(){form.addGridItem();},
"Date": function(){form.addDateItem();},
"Time": function(){form.addDateTimeItem();}
};
然后我会这样调用表单创建函数:
for (var i = 1; i < dataObjectArray.length; i++){
formDictionary[dataObjectArray[i].question]();
}
目前,我收到以下错误:
TypeError: Cannot find function undefined in object [object Object]. (line 113, file "Code")
我知道我尝试过的方法可能不止几个问题(我自己也发现了一些),但我找不到更好的解决方案。
如果可能,我希望避免使用 switch 语句,但如果它们是我唯一的选择,我会使用它们。
【问题讨论】:
-
使用
Logger.log()语句将信息打印到LOG。然后从菜单中选择查看、日志。检查值是否符合您的预期。我们需要知道您的期望与您得到的相比。 -
@SandyGood 我实际上一直在这样做,但没有从中获得任何有用的信息。我可以告诉你,第一个 for 循环中的
dataObjectArray已正确加载。在我添加最后的for循环之前,脚本运行良好。另外,我已将错误描述添加到问题中。 -
错误信息表明函数未定义。函数是
question(),也是对象中的一个属性。所以问题可能出在dataObjectArray对象上。如果dataObjectArray不是全局变量,并且调用dataObjectArray的函数位于不同的函数中,则dataObjectArray中的数据可能已丢失。您是否在定义它的同一函数中调用dataObjectArray对象?
标签: javascript google-apps-script google-sheets google-forms