将Google表格移动脚本从编辑时更改为手动

时间:2018-12-12 20:26:27

标签: javascript google-apps-script google-sheets

我正在尝试将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());  
}
    }
  }

我已经创建了帮助链接:

Calendar

Acct

0 个答案:

没有答案