Javascript 从菜单手动运行Google应用程序脚本,而不是打开
我最近更新了我的脚本,从自定义菜单调用它,而不是从工作表中的按钮,但我发现脚本在打开时立即运行“copyNew”功能,但我希望只有在我从自定义菜单手动单击它时才能运行,有人能指导我调整此脚本以实现这一点吗 “copyNew”函数将“结果”表中的所有内容复制到“新”表中 “clearCells”函数用于清除“结果”表中的某些列 以下是脚本: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
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没有什么问题就是这样,非常感谢