使用 Apps 脚本根据 2 个条件将一行从电子表格发送到另一个电子表格

Send a row from a spreadsheet to another based on 2 conditions with Apps Script

我正在尝试将一行从电子表格发送到另一个电子表格,下面的脚本工作正常。 但现在我正在尝试添加两个改进:

  1. 如果C列中有声音“黄色1”或“绿色2”或“红色3”或“棕色5”,则激活脚本
  2. 将行发送到目标电子表格后,从源电子表格中删除该行

我正在尝试:

  1. IF statement
  2. s.deleteRow(row)

但是我无法达到目标,因为有一些错误

function onEdit(event) {
  if(r.getColumn() == 3 && r.getValue() == 'Yellow 1','Green 2','Red 3','Brown 5') {
  var ss = SpreadsheetApp.openById('xxx');
  var r = sss.getSheetByName('source');
  var SRange = ss.getDataRange();
  var A1Range = SRange.getA1Notation();
  var SData = SRange.getValues();
  var tss = SpreadsheetApp.openById('yyy');
  var ts = tss.getSheetByName('destination');
  s.getRange(row, 1, 1, numColumns).moveTo(ts);
  ss.deleteRow(row);
}
} 

我相信你的目标如下。

  • 'Yellow 1','Green 2','Red 3','Brown 5' 的值之一被放入活动 Spreadsheet 的“来源”sheet 的“C”列中时,您想将此行移动到其他 Spreadsheet.
  • 中的“目的地”sheet
  • 您想通过 OnEdit 触发器运行 此脚本。

不幸的是,当我看到你的放映脚本时,我发现该脚本有很多修改点。例如rssssrow的变量没有声明。那么,在这种情况下,下面的示例脚本怎么样?

示例脚本:

请将 var dstSheet = SpreadsheetApp.openById('###').getSheetByName('destination');### 替换为您的目标 Spreadsheet ID。而且,please install OnEdit trigger to the function installedOnEdit。因为使用openById时,需要使用可安装的触发器

function installedOnEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();
  var values = ['Yellow 1', 'Green 2', 'Red 3', 'Brown 5'];
  if (sheet.getSheetName() == 'source' && range.columnStart == 3 && values.includes(range.getValue())) {
    var dstSheet = SpreadsheetApp.openById('###').getSheetByName('destination');
    var rowValue = sheet.getRange(range.rowStart, 1, 1, sheet.getLastColumn()).getValues()[0];
    dstSheet.appendRow(rowValue);
    sheet.deleteRows(range.rowStart, 1);
  }
}
  • 在此脚本中,当您编辑“source”sheet 的列“C”时,当编辑的值包含在 ['Yellow 1', 'Green 2', 'Red 3', 'Brown 5'] 的值中时,该行将移动到目标sheet。并且,该行被删除。

参考: