如何使用 Apps 脚本创建多个表单,这些表单将输入一个 sheet WITH SHEET TITLES

How to use Apps Script to create multiple forms that feed into one sheet WITH SHEET TITLES

我的任务是创建一个自动反馈报告系统,该系统应该向我们公司内给定团队的每个成员发送反馈表。我目前已对其进行设置,以便对于团队中的每个成员,所有其他团队成员都会得到该人的调查,并将答复记录并记录在一个 google sheet 中,然后导出到 powerBI .

我的问题是,在回复中 sheet 每个作品 sheet 的标题是 "Form Response 1"、"Form Response 2" 等,而不是它出现的形式的名称来自,所以收集的数据不能归因于正确的人,所以它几乎没有用。

我知道我可以将所有数据记录到单独的 spreadsheets,然后将它们合并到 powerBI 或 excel,甚至是 sheets,但是这是不可取的。这将需要在数据 collection 和数据导出之间执行额外的步骤,我只想能够导出文件并使用它,所以请不要推荐此作为解决方法,因为它不会帮助我。

我在每个相关行之前都包含了 ***** 以便那些希望重现的人更容易找到有用的行

这是主要功能:

function main() {
  var groupEmails = ["team1@company.com", "team2@company.com", "team3@company.com"]
  var rootFolder = DriveApp.getRootFolder();
  var surveyFolder = getOrCreateFolder(rootFolder, "SurveyFolder");
  var responseFolder = getOrCreateFolder(surveyFolder, "responseFolder")

  *****var responseFile = SpreadsheetApp.create("Responses");
  *****responseFolder.addFile(DriveApp.getFileById(responseFile.getId()));

 // Loop through groups, creating forms for each user then sending those to all other group members
  for (i in groupEmails){
    groupEmail = groupEmails[i]
    var userEmailMap = getUserEmailMap(groupEmail);

    // Get or create SurveyFolder
    var teamSurveyFolder = getOrCreateFolder(surveyFolder, groupEmail.substring(0,groupEmail.indexOf('@')).concat("SubjectiveSurveys"));

    // Create a user folder and add a form to that folder
    var formMap = {}
    for (fullName in userEmailMap){
      var email = userEmailMap[fullName]
      var userFolder = getOrCreateFolder(teamSurveyFolder, fullName);
      var title = fullName + "'s Feedback Survey For " + getTodaysDate()

      // Create the new form and move it to the user folder
      var userForm = createFormForUser(title, getFirstName(email), responseFile.getId());
      moveFile(userForm.getId(), rootFolder.getId(), userFolder.getId());
      formMap[email] = userForm
    }
  }
}

这是我的(简化的)表单创建函数:

function createFormForUser(title, user, sheet) {
  form = FormApp.create(title);

  form.setTitle(title);

  // add grid 
  form.addGridItem()
  .setTitle("Feedback Type")
  .setRows(['Rate team member based on how much you would like to grab a beer with them outside of work'])
  .setColumns(['0','1','2','3','4','5','6 (N/A)'])
  .setRequired(true)

  *****form.setDestination(FormApp.DestinationType.SPREADSHEET, sheet);

  return form
}

您可以使用 sheet.getFormUrl() 在每个 sheet 上获取表单网址,并在传播 sheet 端重命名每个 sheet。

片段:

responseFile
  .getSheets()
  .forEach(function(sheet) {
    if ((url = sheet.getFormUrl()))
      sheet.setName(FormApp.openByUrl(url).getTitle());
  });