如何基于Google电子表格中Sheet1中A列中的名称自动创建工作表名称?

时间:2017-06-05 18:37:52

标签: google-apps-script google-sheets

我自己仍在学习GoogleApp脚本。任何人都可以指导我正确的方向如何编辑下面的脚本,以便不是按照当前日期命名新工作表,而是从Sheet1的A列中取名,然后重命名。

请注意,我会继续在列中的新单元格中使用新名称更新A列。

提前感谢您的帮助!

这是我的脚本仅适用于日期:

function onOpen() {
var menu = [{name: "Add", functionName: "newSheet"}];
SpreadsheetApp.getActiveSpreadsheet().addMenu("Sheet", menu);
}

function newSheet() {
var sheetName = formatDate();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var templateSheet = ss.getActiveSheet();
ss.insertSheet(sheetName, ss.getSheets().length, {template: templateSheet});
}

function formatDate() {
var month, day, d = new Date();
month = ('0'+(d.getUTCMonth()+1)).slice(-2);
day = ('0'+d.getUTCDate()).slice(-2);
return d.getUTCFullYear()+'-'+month+'-'+day;
}

2 个答案:

答案 0 :(得分:2)

下面的代码从A2获取col A中的所有值:A,过滤它们以忽略数据中的空白单元格,然后检查表单是否已经存在,如果它们已经存在则没有任何反应。如果工作表不存在,则复制模板工作表,重命名并将其放在工作表标签的末尾。

function onOpen() {
    var menu = [{
            name : "Add",
            functionName : "newSheet"
        }
    ];
    SpreadsheetApp.getActiveSpreadsheet().addMenu("Sheet", menu);
}

function newSheet() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var templateSheet = ss.getActiveSheet();
    var sheet1 = ss.getSheetByName("Sheet1")
        var getNames = sheet1.getRange("A2:A").getValues().filter(String).toString().split(",");

    for (var i = 0; i < getNames.length; i++) {
        var copy = ss.getSheetByName(getNames[i]);
        if (copy) {
            Logger.log("Sheet already exists");
        } else {
            templateSheet.copyTo(ss).setName(getNames[i]);
            ss.setActiveSheet(ss.getSheetByName(getNames[i]));
            ss.moveActiveSheet(ss.getNumSheets());
        }
    }
}

答案 1 :(得分:1)

看看这是否适合您。

function onOpen() {
  var menu = [{name: "Add", functionName: "newSheet"}];
  SpreadsheetApp.getActiveSpreadsheet().addMenu("Sheet", menu);
}

function newSheet()
{
  var sp = SpreadsheetApp.getActiveSpreadsheet();
  var sheetnameobj = sp.getSheetByName("Sheet1");
  //You can place a for loop here, if you want to create multiple sheets
  var newsheetname = sheetnameobj.getRange("A2").getValue();//Get Name of Your New Sheet From Column A of Sheet1

  sp.insertSheet(newsheetname);
}