Reputation: 13
I am trying to allow users to change the name of a sheet; however, when they do I want the new sheet name to appear in a cell. I basically want the logic to be:
If a specific sheet's sheetname is edited {
cell on another sheet = new sheet name
}
I can't seem to figure out how to use onEdit(e)
to do this.
Any help would be greatly appreciated
Upvotes: 1
Views: 148
Reputation: 5953
You can use installable change trigger which runs when a user modifies the structure of a spreadsheet.
function onOpen(e){
var ss = e.source;
//Save the sheet id and sheet name in script properties
var scriptProperties = PropertiesService.getScriptProperties();
//Initially delete existing script properties
scriptProperties.deleteAllProperties();
var sheets = ss.getSheets();
sheets.forEach(sheet => {
Logger.log("id: "+sheet.getSheetId().toString()+", name: "+sheet.getName());
scriptProperties.setProperty(sheet.getSheetId().toString(),sheet.getName());
});
}
function onChange(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
Logger.log(e.changeType);
if(e.changeType=="OTHER"){
var scriptProperties = PropertiesService.getScriptProperties();
var origName = scriptProperties.getProperty(sheet.getSheetId().toString());
Logger.log(origName);
Logger.log(sheet.getName());
if(origName != sheet.getName()){
//update script properties
scriptProperties.setProperty(sheet.getSheetId().toString(),sheet.getName());
//write new name in the cell
sheet.getRange("A1").setValue(sheet.getName());
Logger.log(scriptProperties.getProperties());
}
}
}
Apr 10, 2021, 4:28:46 AM Info OTHER
Apr 10, 2021, 4:28:46 AM Info Sheet1
Apr 10, 2021, 4:28:46 AM Info test
Apr 10, 2021, 4:28:46 AM Info {1029143107=Checkbox, 1793152938=test}
Upvotes: 2