希望将 sheet 复制为新选项卡并根据特定单元格值重命名

Looking to copy a sheet over as a new tab and renaming it based off a specific cell value

为了工作,我的团队保留了一个常客数据库,每次我们将新客户登录到数据库时,团队都必须在其中复制并粘贴“模板”页面。

我希望他们能够单击标有“创建新客户”的 sheet,该标签在单元格 A1 和单元格 B1 中仅显示两个单元格“客户名称”,他们可以在其中手动输入名称. 一旦他们这样做了,我想在那些复制原始模板 sheet 的单元格旁边有一些提交按钮,并将新选项卡重命名为单元格 B1 中的客户名称,同时保持对模板页面。

如果我造成任何混淆,我深表歉意,但我在团队删除 data/scripts 等方面遇到了多个问题,导致我自己回溯以不断弄清楚。提前致谢!

描述

我可以建议使用 Ui 提示来获取客户名称。下面是一个提示用户输入名称、复制模板、应用客户名称和应用模板保护的简单示例。提示是从菜单选项而不是电子表格单元格触发的。

脚本

function onOpen(e) {
  var menu = SpreadsheetApp.getUi().createMenu("My Menu");
  menu.addItem("Create New Customer","createNewCustomer");
  menu.addToUi();
}

function createNewCustomer() {
  try {
    let ui = SpreadsheetApp.getUi();
    let response = ui.prompt("Customer Name",ui.ButtonSet.OK_CANCEL);
    if( response.getSelectedButton() == ui.Button.OK ) {
      let spread = SpreadsheetApp.getActiveSpreadsheet();
      let sheets = spread.getSheets();
      let name = response.getResponseText();
      // make sure the sheet doesn't already exist
      sheets.forEach( sheet => { if( sheet.getName() === name ) { throw "Customer "+name+" already defined" } } );
      let template = spread.getSheetByName("Template");
      let copy = template.copyTo(spread);
      copy.setName(name);
      // get all protected ranges from template
      let protections = template.getProtections(SpreadsheetApp.ProtectionType.RANGE);
      for( let i = 0; i < protections.length; i++ ) {
        let protection = protections[i];
        let rangeNotation = protection.getRange().getA1Notation();
        let protectRange = copy.getRange(rangeNotation).protect();
        protectRange.setDescription(protection.getDescription());
        protectRange.setWarningOnly(protection.isWarningOnly());
        // set all eligible editors
        if (!protection.isWarningOnly()) {
          protectRange.removeEditors(protectRange.getEditors());
          protectRange.addEditors(protection.getEditors());
        }
      }
    }
  }
  catch(err) {
    ui.alert(err);
  }
}

参考