我有以下脚本,其想法是当用户提交表单时(当表单填充该答案时),它会使用给定的信息创建一个新表单,其中包含用于填充表单的一些信息。
所以一步一步看起来应该是这样的:
每当添加新条目时,这都必须有效。
这是我到目前为止,基于模板的新工作表正在工作,但我无法弄清楚重命名或IMPORTRANGE部分。如果有人可以看看并给我一只手牌,那就是王牌!
function FormSubmit(){
Logger.log('Form Submited');
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var lastRow = sheet.getLastRow();
var Name = sheet.getRange(lastRow, 4).getValue();
var templateSheet = ss.getSheetByName('Template');
ss.insertSheet(1, {template: templateSheet});
var sourceSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var sheetNumber, sourceSheet, newSheetName;
for( sheetNumber = 0; sheetNumber < sourceSheets.length; sheetNumber++) {
sourceSheet = sourceSheets[sheetNumber];
newSheetName = sourceSheet.getRange("E3").getValue();
sourceSheet.setName(newSheetName);
}
}
答案 0 :(得分:0)
目前还不清楚您对“IMPORTRANGE”的看法。 Sandy已经编写了一种从实际表单提交中检索名称的方法,但是,我将使用您从电子表格中提取它的方法,因为它实际上设置了表单的名称几乎没有区别。
最简单的解决方案是在插入时立即设置工作表的名称。继续阅读here,但实质上我们要做的不是
ss.insertSheet(1, {template: templateSheet});
相反,假设您将名称存储在变量newSheetName
中。那我们就有了
ss.insertSheet(newSheetName, 1, {template: templateSheet});
或者如果您不关心插入工作表的位置(或者确切地说您希望它在最后),这也有效:
ss.insertSheet(newSheetName, {template: templateSheet});
现在我也想解决这个问题:
var sourceSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var sheetNumber, sourceSheet, newSheetName;
for( sheetNumber = 0; sheetNumber < sourceSheets.length; sheetNumber++) {
sourceSheet = sourceSheets[sheetNumber];
newSheetName = sourceSheet.getRange("E3").getValue();
sourceSheet.setName(newSheetName);
}
要开始,var sourceSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
可以完全替换为var sourceSheets = ss.getSheets()
,因为您已经检索了电子表格。
此块将为您的所有工作表执行名称设置。这是您可能不想要的,因为您有表单回复以及模板表。