user1747036
user1747036

Reputation: 524

Issue with ss.insertSheet - inserted sheet has wrong name

Hello I wrote a small script to copy one template sheet in a spreadsheet, as a new sheet in the same spreadsheet.

I wrote two versions of it, one driven by a menu that asks for the name of the new sheet to be created:

function addonenewSheet() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var temp = ss.getSheetByName('template');
    var naame = Browser.inputBox("CustomerID to be created");
    try {
        ss.setActiveSheet(ss.getSheetByName(naame));
    } 
    catch (e) {
        ss.insertSheet(naame, {template:temp});
    }
}

This one works as intended, and names the new sheet 234 if I say so in the inputbox.

The second function is very similar, but parses some values and attempts to create many sheets at once:

function addmissingSheets() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var temp = ss.getSheetByName('template');
    var sheet = SpreadsheetApp.getActiveSheet();
    var data = sheet.getDataRange().getValues();
    for (var i = 10; i < data.length; i++) {
        if(typeof data[i][1] == 'number'){
            try {
                ss.setActiveSheet(ss.getSheetByName(data[i][1]));
            } 
            catch (e) {
                Logger.log('Customer ID: ' + data[i][1]);
                var insertpage = data[i][1];
                ss.insertSheet(insertpage, {template:temp});
            }
         }
     }
 }

As long as Logger.log is concerned, data[i][1] has the right value, but somehow insertSheet creates sheets named "copy of template", "copy of template 2"... Instead of taking the value assigned in data[i][1]

Would anyone know why this behaviour and how I can solve this issue?

Upvotes: 0

Views: 813

Answers (1)

Vytautas
Vytautas

Reputation: 2286

your second script does not use correct variable types. The method you are using insert sheet uses types (<string>, {template:<sheet>}). Since your customer ID is a number it does not work. There is a simple fix you can do

Change

var insertpage = data[i][1];

into:

var insertpage = data[i][1].toString();

and you will now be able to use the customer ID (which is a number) to create a sheet name (which is a string)

Upvotes: 1

Related Questions