0

我有一个代码可以帮助我根据给定列中的条件复制一行数据。我有一张名为“Master”的表格,其中包含大约 1000 行数据。如果“Master”的第 1 列包含“Positive”或“Negative”字样,我想将一行数据移动到名为“Master Responses”的工作表中。我在 IF STATEMENT 中使用了 or 函数 (||) 来选择条件(即如果输入“正”或“负”),但只有在我在第一列中键入“正”时才会复制该行。当我在第一列中输入“Negative”时,该行不会被复制。另外,我想知道如果我必须使用“.openByID 或 .openByURL”调用“主响应”表,应该如何修改代码。我已附上代码,请随时编辑。我是脚本新手,已经坚持了一个多月。任何帮助,将不胜感激。提前致谢。

function onEdit()
{
  var sheetNamesToWatch = ["Master"];
  var columnNumberToWatch = 1;
  var valuesToWatch = ["Positive"];
  var valuesToWatch1 = ["Negative"];
  var targetSheetsToMoveTheRowTo = ["Master Responses"];

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

  if(sheetNamesToWatch.indexOf(sheet.getName()) != -1 && 
  valuesToWatch.indexOf(range.getValue()) != -1 || 
  valuesToWatch1.indexOf(range.getValue()) != -1 && range.getColumn() 
  ==columnNumberToWatch)
  {
    var targetSheet = ss.getSheetByName(targetSheetsToMoveTheRowTo[valuesToWatch.indexOf(range.getValue())]);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, 
    sheet.getLastColumn()).copyTo(targetRange);
  }
}
4

1 回答 1

0

我不确定 .openByID 或 .openByURL,但是这应该可以解决“否定”的问题。

我还在第一个 if 语句上添加了额外的括号,以便我清楚它在检查什么。

function onEdit()
{
  var sheetNamesToWatch = ["Master"];
  var columnNumberToWatch = 1;
  var valuesToWatch = ["Positive"];
  var valuesToWatch1 = ["Negative"];
  var targetSheetsToMoveTheRowTo = ["Master Responses"];

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

  if((sheetNamesToWatch.indexOf(sheet.getName()) != -1) && ((valuesToWatch.indexOf(range.getValue()) != -1) || 
  (valuesToWatch1.indexOf(range.getValue()) != -1)) && (range.getColumn() ==columnNumberToWatch))
  {
    if (valuesToWatch.indexOf(range.getValue()) != -1)
    {
      var targetSheet = ss.getSheetByName(targetSheetsToMoveTheRowTo[valuesToWatch.indexOf(range.getValue())]);
    }
    else
    {
      var targetSheet = ss.getSheetByName(targetSheetsToMoveTheRowTo[valuesToWatch1.indexOf(range.getValue())]);
    }


    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, 
    sheet.getLastColumn()).copyTo(targetRange);
  }
}
于 2018-01-23T02:55:09.897 回答