Google 工作表脚本,用于将一些值从一行移动到另一个选项卡中的一行

Google sheets script to move some values from a row to a row in another tab

我有一个 sheet,我在其中管理客户文件的进度。 我尝试了在这里找到的一个脚本,将行从一个选项卡移动到另一个选项卡。 我需要修改代码以满足我的需要...

此脚本的作用是在输入特定值时将一行从一个选项卡移动到另一个选项卡(在下面的代码中,它在输入“OUI”一词时将一行从“Suivi Clients”移动到“Clients Finalisé”在第 21 列(“U”列)中输入)。此脚本可以很好地移动具有一个条件的整行。

我需要的有点复杂。

首先,“Suivi Clients”和“Clients Finalisé”这两个选项卡完全相同,包含相同的公式。 B-H-I-J-K-O-Q-R-S-T-X 和 Y 列中的公式为 ARRAYFORMULA。其他列 A-C-D-E-F-G-L-M-N-P-U-V-W 和 Z 为空,必须手动填写。我解释这个是因为我首先想要的是只有手动填充的列的内容从一个选项卡移动到另一个选项卡。

其次,我希望“Suivi Clients”选项卡中的条件在 U 列中为“OUI”或“ANNULÉ”,以便行从“Suivi Clients”变为“Clients Finalisé”。这将意味着客户的文件已付款或已取消,因此已完成。

一旦客户的行位于“Clients Finalisé”选项卡中,我希望如果我将 U 列的值从“OUI”或“ANNULÉ”更改为“NON”,该行将返回到“Suivi 客户”选项卡。这意味着客户已决定不再取消或付款出现问题,因此文件未完全完成。

我可能需要 2 个相同的脚本,我会改编并分配给每个选项卡。

function onEdit() {
  // moves a row from a sheet to another when a magic value is entered in a column
  // adjust the following variables to fit your needs

  var sheetNameToWatch = "Suivi Clients";

  var columnNumberToWatch = 21; // column A = 1, B = 2, etc.
  var valueToWatch = "OUI";
  var sheetNameToMoveTheRowTo = "Clients Finalisé";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();


  if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {

    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
    sheet.deleteRow(range.getRow());
  }
}

这是我的 sheet 对于那些想看表格的人:

https://docs.google.com/spreadsheets/d/1CPcMx3Dhbqi-zO4D3jYNxO-PGjyW3iTfRo5gRmEB9p4/edit#gid=0

谢谢。

试试这个方法

function onEdit(e) {
  var sh = e.source.getActiveSheet();
  var rng = e.source.getActiveRange();

  if (sh.getName()=='Suivi Clients' && rng.getColumn()==21){
    if(rng.getValue()=='OUI' || rng.getValue()=='ANNULÉ'){

      var dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Clients Finalisé')
      dest.insertRowBefore(7)

      var plage = sh.getRange('C' + rng.getRow() + ':G'  + rng.getRow())
      plage.copyTo(dest.getRange("C7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
      var plage = sh.getRange('L' + rng.getRow() + ':N'  + rng.getRow())
      plage.copyTo(dest.getRange("L7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
      var plage = sh.getRange('P' + rng.getRow())
      plage.copyTo(dest.getRange("P7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
      var plage = sh.getRange('U' + rng.getRow() + ':W'  + rng.getRow())
      plage.copyTo(dest.getRange("U7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)

      sh.deleteRow(rng.getRow())
    }
  }

  if (sh.getName()=='Clients Finalisé' && rng.getColumn()==21){
    if(rng.getValue()=='NON'){

      var dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Suivi Clients')
      dest.insertRowBefore(7)

      var plage = sh.getRange('C' + rng.getRow() + ':G'  + rng.getRow())
      plage.copyTo(dest.getRange("C7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
      var plage = sh.getRange('L' + rng.getRow() + ':N'  + rng.getRow())
      plage.copyTo(dest.getRange("L7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
      var plage = sh.getRange('P' + rng.getRow())
      plage.copyTo(dest.getRange("P7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
      var plage = sh.getRange('U' + rng.getRow() + ':W'  + rng.getRow())
      plage.copyTo(dest.getRange("U7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)

      sh.deleteRow(rng.getRow())
    }
  }

  // other onEdit here
}