当 B 列显示“开始”时,我尝试使用相当标准的从一张工作表复制行到另一张工作表的代码,但 B 列中有以下公式:
=IF(A2 = "Complete","Start","Not Yet")
并且此代码似乎无法识别从“尚未”更改为“开始”的公式。任何帮助将不胜感激。谢谢!
function onEdit(event) {
// assumes source data in sheet named Needed
// target sheet of move to named Acquired
// test column with yes/no is col 4 or D
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Temp" && r.getColumn() == 1 && r.getValue() == "Complete") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Start");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
最佳答案
问题不在于它不“识别”公式更改值。如果您在复制公式后再次查看公式,您应该会注意到引用从 A2
更改为 Temp!A2
。
moveTo
就像您将每个单元格单独剪切粘贴到新操作中一样。这导致对其原始单元格的引用“保持”。
如果不需要,也许您应该切换到 copyTo
。这可能会对您的配方产生其他副作用。但对于你所举的这个简单的例子来说应该可以很好地工作。
s.getRange(row, 1, 1, numColumns).copyTo(target); //try copyTo here
关于google-apps-script - Google Sheet 将行复制到新工作表 IF 公式触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52858414/