根据单元格信息将数据推送到特定工作表

Pushing data to specific sheets depending upon cell information

好的,我这里有一些代码我认为应该可以工作,但没有。我想要这样,如果任何 sheet 的第一列的状态为 "complete",它就会推送到 "Completed Tasks" sheet。但是由于某种原因它不起作用。我不确定这是否是语法问题。

function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if((s.getName() == "Beau" || "Derek" || "Jay" || "Steven" || "Terence" || "Victor") && r.getColumn() == 1 && r.getValue() == "Complete") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Completed Tasks");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

这是我 sheet 的 link。正如您在 "Beau" sheet 上看到的那样,有一些信息,但还没有推送到任何地方。

https://docs.google.com/spreadsheets/d/1_HQJ2UK6R3QTLY9oeVe-PIaZngPN1luQAz633taE4Oo/edit?usp=sharing

我也希望这样,如果信息输入到前面 "To Do" sheet,它会检查 "Assigned To" 单元格并将其推送到正确的人的 sheet.之前我们把它简单多了,但是通过分离 sheets 它让我变得非常复杂(根据我的经验)

谢谢!

我从未见过语法 s.getName() == "Beau" || "Derek" || "Jay" || "Steven" || "Terence" || "Victor" 并且显然它不起作用,如果您记录上面的内容,它总是 return "Derek",第二个名字。为了克服这个问题,创建一个带有名称的 object/array 并检查名称是否存在。

例如

function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet(),
      s = event.source.getActiveSheet(),
      r = event.source.getActiveRange(),
      allowed = {"Beau" : 1 , "Derek" : 1 , "Jay" : 1 , "Steven" : 1 , "Terence" : 1 , "Victor" : 1};

  if( allowed[ s.getName() ] && r.getColumn() == 1 && r.getValue() == "Complete") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Completed Tasks");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}
s.getName() == "Beau" || "Derek" || "Jay" || "Steven" || "Terence" || "Victor"

行不通。您必须使用:

s.getName() == "Beau" || s.getName() == "Derek" || s.getName() == "Jay" || s.getName() == "Steven" || s.getName() == "Terence" || s.getName() == "Victor"

但是,没有理由一遍又一遍地继续使用 getName() 方法。创建一个变量:

var nameToCheck = s.getName();
Logger.log('the name is: ' + nameToCheck);

if (nameToCheck == "Beau" || nameToCheck === "Derek" || nameToCheck === "Jay" || nameToCheck === "Steven" || nameToCheck === "Terence" || nameToCheck === "Victor")

看看这是否有效(先禁用当前的 onEdit):

function onEdit(e) {
var ss = e.source,
    s = ss.getActiveSheet(),
    sheets = ["Beau", "Derek", "Jay", "Steven", "Terence", "Victor"];
if (sheets.indexOf(s.getName()) === -1 || e.range.columnStart !== 1 || e.value !== 'Complete') return;
ss.getSheetByName('Complete Tasks')
    .appendRow(e.range.offset(0, 0, 1, 7)
        .getValues()[0])
s.deleteRow(e.range.rowStart);
}