Javascript (谷歌脚本)需要帮助找出如何在创建谷歌表单时减少对谷歌脚本服务的调用
我是新来的,所以如果我的格式/方法需要一些工作,我深表歉意 我目前正在编写一个谷歌脚本,生成个性化调查(谷歌表单),并与一年前回答过类似调查的人共享 我有一个谷歌电子表格,上面有调查的所有问题,以及个人以前的回答 脚本似乎正在运行(生成带有电子表格数据的个性化表单);但是,我遇到的问题是脚本运行时间太长,我没有时间了。它可以在超时前的6分钟内生成大约10个调查,所以我一直在成批生成调查,但我的google脚本调用超出了我每天的时间限制 是否有人对如何使此代码更有效地进行个性化调查有任何建议 作为代码现在如何工作的指南(我认为),它在前几行中提取电子表格数据,然后为每个学校运行一个for循环,然后在该for循环中运行另一个for循环,填充表单中的每个问题 如有必要,我可以提供电子表格和它制作的示例表格 谢谢你的建议 -尼克Javascript (谷歌脚本)需要帮助找出如何在创建谷歌表单时减少对谷歌脚本服务的调用,javascript,google-apps-script,google-forms,google-sheets-api,Javascript,Google Apps Script,Google Forms,Google Sheets Api,我是新来的,所以如果我的格式/方法需要一些工作,我深表歉意 我目前正在编写一个谷歌脚本,生成个性化调查(谷歌表单),并与一年前回答过类似调查的人共享 我有一个谷歌电子表格,上面有调查的所有问题,以及个人以前的回答 脚本似乎正在运行(生成带有电子表格数据的个性化表单);但是,我遇到的问题是脚本运行时间太长,我没有时间了。它可以在超时前的6分钟内生成大约10个调查,所以我一直在成批生成调查,但我的google脚本调用超出了我每天的时间限制 是否有人对如何使此代码更有效地进行个性化调查有任何建议 作为
函数pullDataMakeForm(){
var sheet=SpreadsheetApp.getActiveSheet();
var dataRange=sheet.getRange(“Sheet1!A1:CL70”)
var data=dataRange.getValues();
对于(变量i=0;i
这个问题目前已经超出了您的考虑范围,但我将为您提供一个帮助:
隐藏物
使用google sheets存储数据,并根据需要将其缓存在服务器上。由于您的请求有限,您可能需要创建一个按设置的时间表运行的程序来更新缓存。这将允许您首先在缓存中查找数据,并根据需要发出服务请求,或者它可以排队(稍后由所述计划程序运行)
数据结构和算法
看起来您正在尝试迭代表行*列,但是这里不需要双循环,众所周知,双循环是二次循环
在算法复杂性方面
- 停止一次又一次地调用相同的函数,而不将结果保存到变量并重用它
- 停止制造没有在其他地方使用的无用变量
- c语言
- 编程实践
- CLRS算法
- 设计模式(四人帮)
- 计算理论——sipser
- 一些操作系统理论书
- 风格元素(斯特伦克)
信不信由你,你只需阅读上面的列表,就能在这个领域走得更远(无论有没有学位),祝你好运。我认为你的循环想法是明智的。我不知道的是,每个表单的数据来自存储在连续列中的数据,因此第一个循环现在在列上循环,第二个循环在行上循环 它以前是工作的,因为它只需要每次增加一个就可以到达下一列。但您可能会在列用完后继续循环,因为您是在循环行而不是列
function pullDataMakeForm()
{
var sheet = SpreadsheetApp.getActiveSheet();
var nameRange=sheet.getRange("H3:CL3");//The range of all school names
var name=nameRange.getValues();
var dataRange = sheet.getRange("A2:CL70");//The range of all question data with data for each school in consecutive columns
var data=dataRange.getValues();
for (var i = 0; i < name[0].length; ++i)//loops over columns
{
var schoolName = name[0][i];
var form1 = FormApp.create("Profile Survey - " + schoolName).setAllowResponseEdits(true)
.setConfirmationMessage('Thanks for responding!')
.setDescription("This is the profile survey. Your answers from last year have been provided below each question.");
form1.setDestination(FormApp.DestinationType.SPREADSHEET, 'spreadsheetID');
for (var j = 0; j < data.length; ++j)//loops over rows
{
var row = data[j];
var questionText = row[2];
var questionType = row[4];
var questionDescription = row[i+7];//move one column to the right with each new school
var newSection = row[6];
var sectionTitle = row[1];
if (newSection == "Y")
{
var item0 = form1.addSectionHeaderItem();
item0.setTitle(sectionTitle);
}
if (questionType == "Short Answer")
{
var item1 = form1.addTextItem()
item1.setTitle(questionText).setHelpText(questionDescription) /*addItem1*/
} else if (questionType == "Paragraph")
{
var item2 =form1.addParagraphTextItem()
item2.setTitle(questionText).setRequired(false).setHelpText(questionDescription)
} else if (questionType == "Date") {
var item4 = form1.addDateItem()
item4.setTitle(questionText).setRequired(false).setHelpText(questionDescription)
} else if (questionType == "Multiple Choice")
{
var item3 = form1.addMultipleChoiceItem()
item3.setTitle(questionText)
.setRequired(false).setHelpText(questionDescription).setChoices([
item3.createChoice('Yes'),
item3.createChoice('No')
])
.showOtherOption(false);
}
}
}
}
函数pullDataMakeForm()
{
var sheet=SpreadsheetApp.getActiveSheet();
var nameRange=sheet.getRange(“H3:CL3”);//所有学校名称的范围
var name=nameRange.getValues();
var dataRange=sheet.getRange(“A2:CL70”);//所有问题数据的范围,每个学校的数据在连续列中
var data=dataRange.getValues();
对于(var i=0;ifunction pullDataMakeForm()
{
var sheet = SpreadsheetApp.getActiveSheet();
var nameRange=sheet.getRange("H3:CL3");//The range of all school names
var name=nameRange.getValues();
var dataRange = sheet.getRange("A2:CL70");//The range of all question data with data for each school in consecutive columns
var data=dataRange.getValues();
for (var i = 0; i < name[0].length; ++i)//loops over columns
{
var schoolName = name[0][i];
var form1 = FormApp.create("Profile Survey - " + schoolName).setAllowResponseEdits(true)
.setConfirmationMessage('Thanks for responding!')
.setDescription("This is the profile survey. Your answers from last year have been provided below each question.");
form1.setDestination(FormApp.DestinationType.SPREADSHEET, 'spreadsheetID');
for (var j = 0; j < data.length; ++j)//loops over rows
{
var row = data[j];
var questionText = row[2];
var questionType = row[4];
var questionDescription = row[i+7];//move one column to the right with each new school
var newSection = row[6];
var sectionTitle = row[1];
if (newSection == "Y")
{
var item0 = form1.addSectionHeaderItem();
item0.setTitle(sectionTitle);
}
if (questionType == "Short Answer")
{
var item1 = form1.addTextItem()
item1.setTitle(questionText).setHelpText(questionDescription) /*addItem1*/
} else if (questionType == "Paragraph")
{
var item2 =form1.addParagraphTextItem()
item2.setTitle(questionText).setRequired(false).setHelpText(questionDescription)
} else if (questionType == "Date") {
var item4 = form1.addDateItem()
item4.setTitle(questionText).setRequired(false).setHelpText(questionDescription)
} else if (questionType == "Multiple Choice")
{
var item3 = form1.addMultipleChoiceItem()
item3.setTitle(questionText)
.setRequired(false).setHelpText(questionDescription).setChoices([
item3.createChoice('Yes'),
item3.createChoice('No')
])
.showOtherOption(false);
}
}
}
}