如何使用 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());
});
我的任务是创建一个自动反馈报告系统,该系统应该向我们公司内给定团队的每个成员发送反馈表。我目前已对其进行设置,以便对于团队中的每个成员,所有其他团队成员都会得到该人的调查,并将答复记录并记录在一个 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());
});