我正在尝试将OnEdit脚本更改为手动运行的脚本。
下面的google脚本可在Edit上运行,用于将AK上放置的“ Y”复制到特定范围的数据(B:AJ)到另一个带有“ BZ”的电子表格,然后将原始行移动到另一张工作表在同一工作簿中。由于它基于onEdit,因此导致用户等待脚本运行,然后在下一行添加“ Y”。我想将其转换为使用现有菜单功能的手动运行脚本。
OnEdit脚本:
function myFunction(e) {
var sourceSheetName = "Bretts Calendar with Accounting";
var destinationSpreadsheetId = '1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So';
var destinationSheetName = "Unprocessed Acct Data";
if (e.source.getSheetName() == sourceSheetName && e.range.getColumn() == 37 && e.value.toUpperCase() == "Y") {
var row = e.range.getRow();
var sourceValues = e.source.getRange("B" + row + ":AK" + row).getValues()[0];
var values = [sourceValues.slice(0, 35)];
values[0].unshift("BZ");
var tss = SpreadsheetApp.openById(destinationSpreadsheetId);
var ts = tss.getSheetByName(destinationSheetName);
ts.getRange(ts.getLastRow() + 1, 2, values.length, values[0].length).setValues(values);
e.range.setValue("Copied");
var destSheetName = "Reviewed Bretts Calendar with Accounting";
var destSheet = e.source.getSheetByName(destSheetName);
e.source.getActiveSheet().getRange(e.range.getRow(), 1, 1, e.source.getActiveSheet().getLastColumn()).moveTo(destSheet.getRange(destSheet.getLastRow() + 1 , 1, 1, e.source.getActiveSheet().getLastColumn()));
var destinationRange = ts.getRange("A2:AK");
destinationRange.sort([{column: 6, ascending: true}, {column: 7, ascending: true}]);
e.source.getActiveSheet().deleteRow(e.range.getRow());
}
}
我知道如何将脚本添加到允许手动运行的下拉菜单中,但是我不知道如何引用脚本要捕获的行,因为它不再处于编辑状态,并且如果我需要循环脚本,以便脚本可以一一捕获所有行,或者它有能力查看所有行并处理副本,然后一次移动所有行。
function onOpen() {
var spreadsheet = SpreadsheetApp.getActive();
var menuItems = [
{name: 'Send Data', functionName: 'sendData_'},
];
spreadsheet.addMenu('Click Me', menuItems);
}
function sendData_(){
var s = SpreadsheetApp.getActive().getSheetByName('Bretts Calendar with Accounting');
var destinationSpreadsheetId = '1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So';
var destinationSheetName = "Unprocessed Acct Data";
s.getRange('B:AK').getValues().forEach(function (r,i){
if (r[36] == "y" || r[36] == "Y") {
var row = e.range.getRow();
var sourceValues = e.source.getRange("B" + row + ":AK" + row).getValues()[0];
var values = [sourceValues.slice(0, 35)];
values[0].unshift("BZ");
var tss = SpreadsheetApp.openById(destinationSpreadsheetId);
var ts = tss.getSheetByName(destinationSheetName);
ts.getRange(ts.getLastRow() + 1, 2, values.length, values[0].length).setValues(values);
e.range.setValue("Copied");
var destSheetName = "Reviewed Bretts Calendar with Accounting";
var destSheet = e.source.getSheetByName(destSheetName);
e.source.getActiveSheet().getRange(e.range.getRow(), 1, 1, e.source.getActiveSheet().getLastColumn()).moveTo(destSheet.getRange(destSheet.getLastRow() + 1 , 1, 1, e.source.getActiveSheet().getLastColumn()));
var destinationRange = ts.getRange("A2:AK");
destinationRange.sort([{column: 6, ascending: true}, {column: 7, ascending: true}]);
e.source.getActiveSheet().deleteRow(e.range.getRow());
}
}
}
我已经创建了帮助链接: