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

时间:2015-01-14 01:11:43

标签: google-apps-script google-sheets

好的,我在这里有一些代码,我觉得应该可行,但不是。我想要它,以便如果任何工作表的第一列具有状态"完成"它推动了'#34;已完成的任务"片。但由于某种原因,它不起作用。我不确定它是否是一个语法问题。

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);
  }
}

这是我工作表的链接。正如你在" Beau"表格中有一些信息,但它没有把它推到任何地方。

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

我也希望这样,如果信息被输入前面"待办事项"表,它检查"分配给"单元格并将其推送到正确的人员表。之前我们把它简单得多了,但是把它分离出来让它变得非常复杂(我的经验很少)

谢谢!

3 个答案:

答案 0 :(得分:1)

看看是否有效(首先禁用当前的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);
}

答案 1 :(得分:0)

我从未见过语法s.getName() == "Beau" || "Derek" || "Jay" || "Steven" || "Terence" || "Victor"而且显然它不起作用,如果您记录上述内容,它将始终返回" Derek",第二个名称。要克服这个问题,请创建一个带有名称的对象/数组,并检查它们是否存在名称。

例如

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);
  }
}

答案 2 :(得分:0)

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")