Javascript 从菜单手动运行Google应用程序脚本,而不是打开

Javascript 从菜单手动运行Google应用程序脚本,而不是打开,javascript,google-apps-script,google-sheets,triggers,Javascript,Google Apps Script,Google Sheets,Triggers,我最近更新了我的脚本,从自定义菜单调用它,而不是从工作表中的按钮,但我发现脚本在打开时立即运行“copyNew”功能,但我希望只有在我从自定义菜单手动单击它时才能运行,有人能指导我调整此脚本以实现这一点吗 “copyNew”函数将“结果”表中的所有内容复制到“新”表中 “clearCells”函数用于清除“结果”表中的某些列 以下是脚本: function onOpen() { var ui = SpreadsheetApp.getUi() ui.createMenu("Payr

我最近更新了我的脚本,从自定义菜单调用它,而不是从工作表中的按钮,但我发现脚本在打开时立即运行“copyNew”功能,但我希望只有在我从自定义菜单手动单击它时才能运行,有人能指导我调整此脚本以实现这一点吗

“copyNew”函数将“结果”表中的所有内容复制到“新”表中 “clearCells”函数用于清除“结果”表中的某些列

以下是脚本:

function onOpen() {

var ui = SpreadsheetApp.getUi()
  ui.createMenu("Payroll")
    .addItem("Create New Month", "CopyNew")
    .addItem("Reset Results", "ClearCells")
    .addToUi();
}

function CopyNew() {  
  var ss = SpreadsheetApp.getActive();
  var sheetName = ss.getSheetByName("Results");
    var createSheet = ss.getSheetByName("NEW");
    if(!newSheet){
      var createSheet = ss.insertSheet("NEW");
      var sourceRange = sheetName.getRange("A1:Q100");
      var targetRange = newSheet.getRange("A1:Q100");
      targetRange.setValues(sourceRange.getValues());
      sourceRange.copyTo(targetRange, {formatOnly:true});
    }
}

CopyNew();//remove this
function ClearCells() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('H7:H100').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('L7:L100').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('N7:N100').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('Q7:Q100').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};
谢谢

就像这样:

function onOpen() {

var ui = SpreadsheetApp.getUi()
  ui.createMenu("Payroll")
    .addItem("Create New Month", "CopyNew")
    .addItem("Reset Results", "ClearCells")
    .addToUi();
}

function CopyNew() {  
  var ss = SpreadsheetApp.getActive();
  var sheetName = ss.getSheetByName("Results");
    var createSheet = ss.getSheetByName("NEW");
    if(!newSheet){
      var createSheet = ss.insertSheet("NEW");
      var sourceRange = sheetName.getRange("A1:Q100");
      var targetRange = newSheet.getRange("A1:Q100");
      targetRange.setValues(sourceRange.getValues());
      sourceRange.copyTo(targetRange, {formatOnly:true});
    }
}

function ClearCells() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('H7:H100').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('L7:L100').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('N7:N100').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('Q7:Q100').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
}

只需删除
CopyNew()将导致每次访问任何函数(包括onOpen())时都运行copyNew()。onOpen没有什么问题就是这样,非常感谢