我可以链接到单个谷歌传播的 G 表单数量是否有限制



我有一个脚本,旨在创建大约 120 个表单并将它们链接到一个电子表格,我将在其中分析数据。在我的电子表格有大约十几个表单链接到它之前,我对脚本没有任何问题。然后我收到一个错误,说目标 ID 无效,在记录 id 并将其手动输入到 url 后,我发现 ID 没有问题......

  var ssSummaryId = '******redacted*******';
  var form = FormApp.create('RM#' + rmNumber).setDestination(FormApp.DestinationType.SPREADSHEET, ssSummaryId);
  form.setDescription(valuesSummary[ii][2])
  .setConfirmationMessage('Thanks for the update on room ' + rmNumber)
  .setShowLinkToRespondAgain(false);
//  form.setDestination(FormApp.DestinationType.SPREADSHEET, ssSummaryId);
  var formId = form.getId();
  var formUrl = form.getPublishedUrl();

编辑我正在添加我的完整脚本和一些附加信息,以防万一有人想检查我的代码并指出所有新手错误。


我正在使用Google脚本来构建电子表格,然后创建120个略有改动的Google表单,这些表单链接到单个电子表格,所有响应都是设计在名为"表单响应n"的单独工作表上。一旦我超过10个表格链接到一张纸,我就会碰壁。注意;在最初的测试中,我记得有一个电子表格,上面有 46 个表单(因此还有工作表)链接到它。正如您在下面的代码中看到的,在每创建 5 个表单后,我让应用程序从它离开的地方重新启动,所以我没有收到任何"延长运行时错误"。只是下面的错误,通常是在脚本从Google Scripts IDE运行两次之后。

在Web开发中使用和修改js多年之后,我终于掌握了基本的javascript。因此,我为糟糕的代码提前道歉。

无法设置响应目标。验证目标 ID,然后重试。(第 54 行,文件"代码")

function spreadsheet_builder() {
  var ssSummaryId = '<<REDACTED>>';
  var ssFormDataId = '<<REDACTED>>';
  var batchSize = 5;  
  var buildStatus = false;
  var ssSummary = SpreadsheetApp.openById(ssSummaryId);
  SpreadsheetApp.setActiveSpreadsheet(ssSummary);
  if (ssSummary.getSheetByName('Summary') == null) {
    var sheetSummary = ssSummary.getSheetByName('Sheet1');
  } else {
    var sheetSummary = ssSummary.getSheetByName('Summary');
  }
  var rangeSummary = sheetSummary.getDataRange();
  var valuesSummary = rangeSummary.getValues();
  buildStatus = get_last_position(valuesSummary, buildStatus); //either returns last position in array or 'true' if task is complete
  if (buildStatus != true || buildStatus > 0) {
    var formCreation = [];
    var formData = get_form_data(ssFormDataId);  // Get form questions from form Data ss, might be better to keep everything on the same sheet
    batchSize = buildStatus + batchSize;
      for ( var ii = buildStatus; ii < batchSize; ii++ ) {
         if (valuesSummary[ii][1] != '') {
           var formCreationReturn = form_builder(formData, valuesSummary, ii, ssSummaryId);
           formCreation.push(formCreationReturn);
         }
       }
    var aSum = [ssSummary, sheetSummary, rangeSummary];
    final_storing_operation(formCreation, aSum, buildStatus);
  }
  if (sheetSummary.getName() != 'Summary') { 
    SpreadsheetApp.setActiveSpreadsheet(ssSummary);
    sheetSummary.activate().setName('Summary');
    sheetSummary.setFrozenColumns(3);
    sheetSummary.setFrozenRows(1);
    sheetSummary.hideColumns(1);  
    //var sSumIndex = sheetSummary.getIndex();
  }
  SpreadsheetApp.setActiveSpreadsheet(ssSummary);
  sheetSummary.activate();
  ssSummary.moveActiveSheet(1);  
}

function form_builder(formData, valuesSummary, ii, ssSummaryId) {
  var lastFormCreated = ii;
  var rmNumber = valuesSummary[ii][1];
  var form = FormApp.create('RM#' + rmNumber).setDestination(FormApp.DestinationType.SPREADSHEET, ssSummaryId);
      form.setDescription(valuesSummary[ii][2])
      .setConfirmationMessage('Thanks for the update on room ' + rmNumber)
      .setShowLinkToRespondAgain(false);
//  form.setDestination(FormApp.DestinationType.SPREADSHEET, ssSummaryId);
  var formId = form.getId();
  var formUrl = form.getPublishedUrl();
  var sectionHeader = 'SECTION_HEADER';      //preformatted form question types.
  var list = 'LIST';
  var paragraphText = 'PARAGRAPH_TEXT';
  for (var j = 1; j < formData.length; j++) {     //top row is header
    switch (formData[j][0]) {
      case sectionHeader:
        form.addSectionHeaderItem().setTitle(formData[j][1]);
        break;
      case list:                                     
        var item = form.addListItem();
        item.setTitle(formData[j][1]).setHelpText(formData[j][2]);
           item.setChoices([
             item.createChoice(formData[j][3]),
             item.createChoice(formData[j][4]),
             item.createChoice(formData[j][5])
          ]);
        break;
      case paragraphText:
        form.addParagraphTextItem().setTitle(formData[j][1]);
        break;
      default:
        form.addSectionHeaderItem().setTitle('OOPS u'don MESSED up');
        break;
    }
  }
  return [formId, formUrl, lastFormCreated, rmNumber];
}  
function final_storing_operation(formCreation, aSum, buildStatus) {
  SpreadsheetApp.setActiveSpreadsheet(aSum[0]);
  aSum[1].activate();
  var startRow = formCreation[0][2] + 1;
  var newRange = aSum[1].getRange(startRow, 1, formCreation.length, 2);  //row, clmn, rows, columns
  var newValues = [];
  for ( var ij = 0; ij < formCreation.length; ij++) {
    var values = [formCreation[ij][0], "=HYPERLINK("" + formCreation[ij][1] + "", "RM#" + formCreation[ij][3] + "")"];
    newValues.push(values);
  }
  newRange.setValues(newValues);
}
function get_last_position (valuesSummary, buildStatus) {
  var rowPos = 1;                                   // start at 1 to ignore headers
  while (valuesSummary[rowPos][1] != '') {    
    if (valuesSummary[rowPos][0] == '') { 
      return rowPos;
    } 
    rowPos++;
  }
   if(valuesSummary[rowPos][0] != '' && valuesSummary[rowPos][1] != '') {
      buildStatus = true;
      return buildStatus;
    }
}
function get_form_data (ssFormDataId) {
  var ssFormData = SpreadsheetApp.openById(ssFormDataId);
  SpreadsheetApp.setActiveSpreadsheet(ssFormData);
  var sheetFormData = ssFormData.getSheets()[0];
  var rangeFormData = sheetFormData.getDataRange();
  var valuesFormData = rangeFormData.getValues();
  return valuesFormData;
}

作为替代方案,您可以创建表单,并有意不将它们链接到电子表格,然后使用一些代码遍历每个表单并提取数据。 您可能希望将表单放入其自己的文件夹中。

或者,您需要使用 Apps Script HTML Service 构建表单,将其嵌入到 Google 协作平台的应用脚本小工具中,然后让每个人都从协作平台填写表单。

最新更新