在表格上获取错误的名称onEdit

时间:2017-01-19 10:07:39

标签: google-apps-script

我有一张模板(KundJobbTemplate)。每次用户更新单元格(F1)时,都应创建模板表(KundJobbTemplate)的副本,名称为“Kund_xxxx:Jobb_xxxx”。

第一次这很好用。但是,如果不手动重命名新创建的工作表“Kund_xxxx:Jobb_xxxx”并通过更新模板工作表(KundJobbTemplate)中的单元格F1来创建新工作表,则新工作表将获得名称“Copy of KundJobbTemplate”而不是“Copy of Kund_xxxx:Jobb_xxxx” ”

那么如何创建一个新的工作表onEdit(用户更新一个单元格),每次模板“KundJobbTemplate”的副本将获得名称“Kund_xxxx:Jobb_xxxx”,如果已经 存在给它起一个名字“Kund_xxxx的副本:Jobb_xxxx”等。

这是我的代码:

function onEdit(event)
{
    var myNewSheetName = "Kund_xxxx:Jobb_xxxx";
    var changedCell= event.source.getActiveRange().getA1Notation();
    if (changedCell == 'F1') {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getSheetByName('KundJobbMall').copyTo(ss);
        SpreadsheetApp.flush(); // Utilities.sleep(2000);
        sheet.setName(myNewSheetName);
        ss.setActiveSheet(sheet);
        }
}

1 个答案:

答案 0 :(得分:1)

问题是您尝试将新工作表命名为与发生错误的现有工作表相同。尝试在最后添加一个随机字符串:

function onEdit(event)
{
  var randomString = (new Date%9e6).toString(36);
    var myNewSheetName = "Kund_xxxx:Jobb_xxxx";
    var changedCell= event.source.getActiveRange().getA1Notation();
    if (changedCell == 'A1') {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getSheetByName('KundJobbMall').copyTo(ss).setName(myNewSheetName + " - " + randomString);
        ss.setActiveSheet(sheet);
        }
}

你可以使用任何随机字符串,上面的var randomString只是一个例子。