【问题标题】:How to Use a Google Script to Change Contents of a Cell When the Sheet Name is Changed by the User用户更改工作表名称时如何使用 Google 脚本更改单元格的内容
【发布时间】:2021-04-09 19:12:24
【问题描述】:
我正在尝试允许用户更改工作表的名称;但是,当他们这样做时,我希望新的工作表名称出现在单元格中。我基本上希望逻辑是:
If a specific sheet's sheetname is edited {
cell on another sheet = new sheet name
}
我似乎不知道如何使用onEdit(e) 来做到这一点。
任何帮助将不胜感激
【问题讨论】:
标签:
google-apps-script
google-sheets
triggers
【解决方案1】:
您可以使用installable change trigger,它在用户修改电子表格的结构时运行。
示例代码:
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());
}
}
}
它有什么作用?
- 工作表打开时。根据工作表的 id 和工作表的名称创建一个键值对。使用PropertiesService将其保存在脚本属性中
- 创建一个可安装的 onChange 触发器。
- 获取活动工作表的id和名称,使用PropertiesService.getProperty(key)在脚本属性中根据工作表的id获取原始名称
- 比较原始工作表名称和当前工作表名称。如果它们不相同,请使用PropertiesService.setProperty(key,value) 更新脚本属性中的工作表名称。然后选择您的范围并使用Range.setValue(value) 设置单元格值
输出:
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}
注意:
- 您可以根据需要删除 onOpen() 中现有脚本属性的删除。
- 您可以更改要在其中写入新修改的工作表名称的范围/单元格。