Reputation: 637
When I execute this code I expect the Generated sheet to be inserted right after the active sheet. But that's not the case, it's always created as the last sheet.
Let's say I have 2 sheets : activeSheet
and notActiveSheet
and I run this code:
var indexActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getIndex()
var nameActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName()
Logger.log(indexActiveSheet,nameActiveSheet)
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(GENERATED);
if (sheet == null){
sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(GENERATED, 1 + indexActiveSheet)
}
Logger.log(sheet.getIndex(), sheet.getName())
But the logs and the spreadsheet shows that's not the case :
[20-10-18 14:42:17:468 CEST] 1.0 activeSheet
[20-10-18 14:42:17:811 CEST] 3.0 Generated
I was expecting
[20-10-18 14:42:17:468 CEST] 1.0 activeSheet
[20-10-18 14:42:17:811 CEST] 2.0 Generated
Upvotes: 2
Views: 1616
Reputation: 27390
activeSheet
to be 1.sheetIndex
starts at 0.If you see the official documentation for insertSheet
:
The index of the newly created sheet. To insert a sheet as the first one in the spreadsheet, set it to 0.
Namely, if you want to place the Generated
sheet after the
activeSheet
you need to call:
insertSheet(GENERATED, indexActiveSheet)
For example, in your case, indexActiveSheet
is 1. To place the
Generated
sheet to the second position, you also need 1 because
this is what insertSheet
accepts if you want to place it at the
second position. Remember, in insertSheet(sheetName, sheetIndex)
sheetIndex=0
is the first sheet, sheetIndex=1
is the second sheet.
function myFunction() {
var GENERATED = 'Generated';
var indexActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getIndex()
var nameActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName()
Logger.log(indexActiveSheet,nameActiveSheet)
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(GENERATED);
if (sheet == null){
sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(GENERATED, indexActiveSheet)
}
Logger.log(sheet.getIndex(), sheet.getName())
}
You don't need to call SpreadsheetApp.getActiveSpreadsheet
so many times when you can simply store into a variable and use that variable instead:
function myFunction() {
var GENERATED = 'Generated';
var ss = SpreadsheetApp.getActiveSpreadsheet()
var act_sh = ss.getActiveSheet();
var indexActiveSheet = act_sh.getIndex()
var nameActiveSheet = act_sh.getName()
var sheet = ss.getSheetByName(GENERATED);
if (sheet == null){
sheet = ss.insertSheet(GENERATED, indexActiveSheet)
}
}
Upvotes: 2