【问题标题】: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());
        }
      }
      
    }
    

    它有什么作用?

    1. 工作表打开时。根据工作表的 id 和工作表的名称创建一个键值对。使用PropertiesService将其保存在脚本属性中
    2. 创建一个可安装的 onChange 触发器。
    3. 获取活动工作表的id和名称,使用PropertiesService.getProperty(key)在脚本属性中根据工作表的id获取原始名称
    4. 比较原始工作表名称和当前工作表名称。如果它们不相同,请使用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() 中现有脚本属性的删除。
    • 您可以更改要在其中写入新修改的工作表名称的范围/单元格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多