Javascript (谷歌脚本)需要帮助找出如何在创建谷歌表单时减少对谷歌脚本服务的调用

Javascript (谷歌脚本)需要帮助找出如何在创建谷歌表单时减少对谷歌脚本服务的调用,javascript,google-apps-script,google-forms,google-sheets-api,Javascript,Google Apps Script,Google Forms,Google Sheets Api,我是新来的,所以如果我的格式/方法需要一些工作,我深表歉意 我目前正在编写一个谷歌脚本,生成个性化调查(谷歌表单),并与一年前回答过类似调查的人共享 我有一个谷歌电子表格,上面有调查的所有问题,以及个人以前的回答 脚本似乎正在运行(生成带有电子表格数据的个性化表单);但是,我遇到的问题是脚本运行时间太长,我没有时间了。它可以在超时前的6分钟内生成大约10个调查,所以我一直在成批生成调查,但我的google脚本调用超出了我每天的时间限制 是否有人对如何使此代码更有效地进行个性化调查有任何建议 作为

我是新来的,所以如果我的格式/方法需要一些工作,我深表歉意

我目前正在编写一个谷歌脚本,生成个性化调查(谷歌表单),并与一年前回答过类似调查的人共享

我有一个谷歌电子表格,上面有调查的所有问题,以及个人以前的回答

脚本似乎正在运行(生成带有电子表格数据的个性化表单);但是,我遇到的问题是脚本运行时间太长,我没有时间了。它可以在超时前的6分钟内生成大约10个调查,所以我一直在成批生成调查,但我的google脚本调用超出了我每天的时间限制

是否有人对如何使此代码更有效地进行个性化调查有任何建议

作为代码现在如何工作的指南(我认为),它在前几行中提取电子表格数据,然后为每个学校运行一个for循环,然后在该for循环中运行另一个for循环,填充表单中的每个问题

如有必要,我可以提供电子表格和它制作的示例表格

谢谢你的建议

-尼克

函数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);     
            }
        }
    }
}