在FormSubmit上创建新工作表,导入范围并根据列的内容重命名

时间:2018-01-15 17:55:25

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

我有以下脚本,其想法是当用户提交表单时(当表单填充该答案时),它会使用给定的信息创建一个新表单,其中包含用于填充表单的一些信息。

所以一步一步看起来应该是这样的:

  • 用户提交表单
  • 工作表更新
  • 工作表创建新标签/表格
  • 工作表重新命名新创建的工作表以反映E列的内容 (他们的名字)
  • 工作表在新单元格A1中执行IMPORTRANGE 创建并命名了表。

每当添加新条目时,这都必须有效。

这是我到目前为止,基于模板的新工作表正在工作,但我无法弄清楚重命名或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);
  }
}

1 个答案:

答案 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(),因为您已经检索了电子表格。

此块将为您的所有工作表执行名称设置。这是您可能不想要的,因为您有表单回复以及模板表。