Javascript 将onEdit函数更改为计时器触发器
我继承了一些工作表,脚本编写超出了我的理解范围,不幸的是,我的研究没有给我答案!我需要一个脚本在每晚午夜运行,而不是使用onEdit触发器。这也意味着脚本将需要查找满足要求的所有条目,而不仅仅是上次编辑的条目 脚本当前执行的操作:Javascript 将onEdit函数更改为计时器触发器,javascript,google-apps-script,triggers,Javascript,Google Apps Script,Triggers,我继承了一些工作表,脚本编写超出了我的理解范围,不幸的是,我的研究没有给我答案!我需要一个脚本在每晚午夜运行,而不是使用onEdit触发器。这也意味着脚本将需要查找满足要求的所有条目,而不仅仅是上次编辑的条目 脚本当前执行的操作: 编辑时,函数“CRMarchive”检查工作表A的第26列,如果编辑的单元格包含“是”,则复制整行并将其粘贴到工作表B,然后从工作表A中删除该行 同样在编辑时,另一个功能“排序”将根据第3列“最新优先”中的日期订购工作表B 我需要脚本执行的操作: 函数“CRMa
- 编辑时,函数“CRMarchive”检查工作表A的第26列,如果编辑的单元格包含“是”,则复制整行并将其粘贴到工作表B,然后从工作表A中删除该行
- 同样在编辑时,另一个功能“排序”将根据第3列“最新优先”中的日期订购工作表B
- 函数“CRMarchive”执行相同的操作,但在午夜以及工作表A上第26列中有“是”的任何行
- 函数“Sort”然后对表B中的所有条目进行排序
function CRMarchive(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var r = s.getActiveRange();
if(s.getName() == "Promotions/Retain" && r.getColumn() == 26 && r.getValues() == "Yes") {
var row = r.getRow();
var numColumns = "25"
var targetSheet = ss.getSheetByName("Archive - Promotions/Retain");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
if(s.getName() == "Dev+Save/Int/Welc+Nurture" && r.getColumn() == 26 && r.getValue() == "Yes") {
var row = r.getRow();
var numColumns = "25"
var targetSheet = ss.getSheetByName("Archive - Dev+Save/Int/Welc+Nurture");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
if(s.getName() == "Reactivation" && r.getColumn() == 26 && r.getValue() == "Yes") {
var row = r.getRow();
var numColumns = "25"
var targetSheet = ss.getSheetByName("Archive - Reactivation");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
if(s.getName() == "Conversions" && r.getColumn() == 26 && r.getValue() == "Yes") {
var row = r.getRow();
var numColumns = "25"
var targetSheet = ss.getSheetByName("Archive - Conversions");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
if(s.getName() == "VIP" && r.getColumn() == 26 && r.getValue() == "Yes") {
var row = r.getRow();
var numColumns = "25"
var targetSheet = ss.getSheetByName("Archive - VIP");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
if(s.getName() == "Service" && r.getColumn() == 26 && r.getValue() == "Yes") {
var row = r.getRow();
var numColumns = "25"
var targetSheet = ss.getSheetByName("Archive - Service");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
提前谢谢 要从OneEdit To time driven trigger调整CRMarchive函数,您需要执行以下更改:
你能显示函数Sort()的代码吗?你知道如何将时间驱动触发器绑定到你的代码中,只是不知道如何修改代码吗?嗨!我在这里为上下文制作了一个空白副本:我知道如何在触发器菜单中创建时间触发器,以及如何在实际代码中创建触发器。这太棒了,谢谢!我每天都在学习,这真的很有帮助。我很快就要让它工作了,第8行出现了一个明显的障碍——“单元格引用超出范围”。我制作了一份空白副本,以便在这里上下文中看到:我真的非常感谢所有的帮助-我需要尽快让它工作,但经过3天的学习/尝试和错误,我仍然无法理解:(我要补充的是,我不是在找人来修复我的脚本,所以如果遇到这种情况,我很抱歉。我接受了上面的所有内容,但是var I和var j位让我困惑-这些位到底在做什么?首先:我的代码有一个拼写错误,应该是
r.getCell(j+1,26)
而不是i+1
-对此很抱歉。但您的问题是,并非所有工作表都有Z列,实际上您只想从电子表格中看到的前6张工作表中循环。在这种情况下,您应该使用计数器变量i
循环到6。我更新了我的代码。重要的删除吗所有空行-它们可能会让你的代码慢得多。啊,我太接近了!我尝试了从I到j的更改,并尝试了在归档表中添加一列Z,但不是同时添加两列。唯一的问题是,它似乎在3-4次后停止循环,所以如果有5+个“是”条目然而,这并不能让所有人都明白!我想这是我自己想要解决的问题,而且我现在可以将它设置为每小时一次。我真的非常感谢你。我将重新学习我的谷歌脚本/Java脚本,但这给了我一个真正的开始!
var row = r.getRow();
var numColumns = "25"
var targetSheet = ss.getSheetByName("Archive - Promotions/Retain");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
function CRMarchive(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (var i = 0; i < 6; i++){
var s = sheets[i];
var r = s.getDataRange();
for (var j = 0; j < r.getLastRow(); j++){
Logger.log(r.getCell(j+1, 26).getA1Notation());
if(r.getCell(j+1, 26).getValue() == "Yes") {
var row = r.getCell(j+1, 26).getRow();
var numColumns = "25";
switch(s.getName()) {
case "Promotions/Retain":
var targetSheet = ss.getSheetByName("Archive - Promotions/Retain");
break;
case "Dev+Save/Int/Welc+Nurture":
var targetSheet = ss.getSheetByName("Archive - Dev+Save/Int/Welc+Nurture");
break;
case "Reactivation":
var targetSheet = ss.getSheetByName("Archive - Reactivation");
break;
case "Conversions":
var targetSheet = ss.getSheetByName("Archive - Conversions");
break;
case "VIP":
var targetSheet = ss.getSheetByName("Archive - VIP");
case "Service":
break;
var targetSheet = ss.getSheetByName("Archive - Service");
break;
}
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
}
}``