将两个几乎相同的脚本合二为一

时间:2021-04-27 14:37:29

标签: google-apps-script google-sheets

我正在尝试复制一个脚本,该脚本将设置为“已关闭”的行从活动工作表发送到存档。问题是我的经理希望我们有另一个活动工作表将它们发送到同一个存档,但我尝试复制粘贴下面的代码并只是更改副本的工作表,但它不起作用。当我这样做时,代码仅适用于第二张纸。这段代码可能一次只能工作一次吗? (你可能会说我在这一切方面都是超级新手)

    function onEdit(event) {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if(s.getName() == "Client Issues and Requests" && r.getColumn() == 1 && r.getValue() == "Closed / Move to Archive") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Archive");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

如何设置它以便查看当前工作表“客户问题和请求”和第二张工作表“工作表 2”(使用与第一个完全相同的模板)

谢谢。

2 个答案:

答案 0 :(得分:1)

function onEdit(e) {
  const s = e.range.getSheet();
  const shts = ["Client Issues and Requests","other sheet name"]
  if(~shts.indexOf(s.getName()) && e.range.columnStart == 1 && e.value == "Closed / Move to Archive") {
    const tsh = e.source.getSheetByName("Archive");
    const tgt = tsh.getRange(tsh.getLastRow() + 1, 1);
    s.getRange(e.range.rowStart, 1, 1, sh.getLastColumn()).moveTo(tgt);
    s.deleteRow(e.range.rowStart);
  }
}

答案 1 :(得分:0)

也许尝试这样的事情:

function onEdit(event) {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var sheets = ["Client Issues and Requests", "sheet 2"];
  if(sheets.includes(s.getName()) && r.getColumn() == 1 && r.getValue() == "Closed / Move to Archive") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Archive");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}