【问题标题】:How to change the sheet name for Google Form responses in Google Apps Script?如何在 Google Apps 脚本中更改 Google 表单响应的工作表名称?
【发布时间】:2020-09-07 06:37:41
【问题描述】:

主 Google 表单的副本通过电子邮件发送给群组。当每个组的成员完成表单时,响应将发送到 Google 电子表格中的工作表。如果有 10 个组,则电子表格中将有 10 个工作表。

每张工作表的名称将默认为 Form Responses 1、Form Responses 2、Form Responses 3...等。

如何将表单响应表名称更改为组的名称。

这是我尝试过的。

 var form = FormApp.openById(copyForm.getId());
 var formLink = form.getPublishedUrl();
 var masterSpreadsheet = SpreadsheetApp.openById("ID");

 form.setDestination(FormApp.DestinationType.SPREADSHEET, masterSpreadsheet.getId());

 var sheets = masterSpreadsheet.getSheets(); 
 
 for(var i = 0; i < sheets.length; i++) {
    if(sheets[i].getFormUrl() == formLink) {
      sheets[i].setName("Group Name");
    }
  }

它在电子表格中新添加的工作表之前重命名工作表。

提前致谢。

【问题讨论】:

  • 记录这两个 url 并显示它们的样子。

标签: google-apps-script google-sheets google-forms


【解决方案1】:

一种广泛的方法是创建一个包含组名和电子表格 URL 的表格,然后使用它来重命名工作表。

实现上述方法的一种方法是使用 on form submit 触发器来重命名工作表:如果工作表具有默认名称模式,则相应地重命名工作表。

var table = [
  ['Group A', 'url1'],
  ['Group B', 'url2']
]

function respondToOnFormSubmit(e){
  var sheet = e.range.getSheet();
  var name = sheet.getName();
  if(/^Form Responses/.test(name)){
    var url = sheet.getFormUrl();
    var newName = table.filter((row) => return row[1] === url;)
    if(newName.length > 0){
      sheet.setName(newName[0]);
    }
  }

相关

【讨论】:

    【解决方案2】:

    这是我解决此问题的方法:

    //After your current setDestination line below:
    form.setDestination(FormApp.DestinationType.SPREADSHEET, masterSpreadsheet.getId());
    
    //insert a new sheet which will be at index [0]. This forces the sheet linked to the form created first at index [1].
    
    // rename the sheet at index [1] -- your form response sheet
    // delete the newly inserted sheet at index [0]
    

    【讨论】:

      【解决方案3】:

      您可能需要调用 SpreadsheetApp.flush() 以确保 getSheets 返回的电子表格列表是完整的。通过测试电子表格的名称,或者假设索引 0 是您要重命名的电子表格,可能还有更直接的方法。

      var form = FormApp.openById(copyForm.getId());
      var formLink = form.getPublishedUrl();
      var masterSpreadsheet = SpreadsheetApp.openById("ID");
      
      form.setDestination(FormApp.DestinationType.SPREADSHEET, masterSpreadsheet.getId());
       
      // Flush changes
      SpreadsheetApp.flush();
      
      var sheets = masterSpreadsheet.getSheets(); 
      
      for(var i = 0; i < sheets.length; i++) {
        if(sheets[i].getFormUrl() == formLink) {
          sheets[i].setName("Group Name");
        }
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多