
[英]How can I apply a formula to a Google Sheet row only after a row has been updated?
[英]Copy rows conditionally to another sheet and removing them once row has been updated
我有一个电子表格,其中包含一个清单,该清单将在活动开始前60、30和1天填写。 这些工作表称为“ 60天”,“ 30天”和“启动”。 我正在尝试将尚未选中的行自动添加到下一张工作表中(因此,“ 60天”中所有未选中的行都将附加到“ 30天”中,并从“ 30天”中添加到“启动”-同样,通过“选中”,我的意思是在单元格中输入“ x”)。 我在代码上有一个很好的开始,但是我一定做错了-因为它似乎没有做任何事情(原谅我对javascript的无知,我从上周开始使用Codecademy进行编码,并且进行了大量的浏览在这些论坛上)。 我觉得我可能缺少一些非常基本的东西,并且欢迎我能得到的任何帮助。 这就是我所拥有的...
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var r = ss.getActiveCell();
var i = 4;//have this number be your first row of data
if(r.getColumn()===5){ // this indicates the column that, if left blank, will mean the row should be copied to the next sheet
if (ss.getActiveSheet().getName()=="60-Day"){
var source_sheet = ss.getSheetByName("60-Day");
var target_sheet = ss.getSheetByName("30-Day");
var last_row = target_sheet.getLastRow();
while(i<=last_row){
if(source_sheet.getValue("E"+i)!="x"){
var source_range = source_sheet.getRange(i,2,1,6); // indicate the columns you'd like to copy
var target_range = target_sheet.getRange(last_row + 1,2,1,6); // indicate the columns where you'd like to paste
source_range.copyTo(target_range);
i++;
SpreadsheetApp.flush();
}else{
i++;
}
}
};
else if (ss.getActiveSheet().getName()=="30-Day"){
var source_sheet = ss.getSheetByName("30-Day");
var target_sheet = ss.getSheetByName("Kickoff");
var last_row = target_sheet.getLastRow();
while(i<=last_row){
if(ss.getValue("E"+i)!="x"){
var source_range = source_sheet.getRange(i,2,1,6);//indicate the columns you'd like to copy
var target_range = target_sheet.getRange(last_row + 1,2,1,6);//indicate the columns where you'd like to paste
source_range.copyTo(target_range);
i++;
SpreadsheetApp.flush();
}else{
i++;
}
};
}
}
}
就是这样-尽管这是我遇到更多麻烦的地方。 如果某行已被推送到目标工作表并在目标工作表上被选中,我希望它从目标工作表中消失,并且我希望源工作表中的原始行现在表明它已经检查了。 另外,如果在源工作表上选中了以前空白的行,我希望被推送到目标工作表的副本消失。 这是我开始迷路的地方。 我将如何实施呢?
认为您会需要更改...
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var r = ss.getActiveCell();
var i = 4;//have this number be your first row of data
if(r.getColumn()===5){ // this indicates the column that, if left blank, will mean the row should be copied to the next sheet
if (ss.getActiveSheet().getName()=="60-Day"){
var source_sheet = ss.getSheetByName("60-Day");
var target_sheet = ss.getSheetByName("30-Day");
var source_last_row = source_sheet.getLastRow();
var target_last_row = target_sheet.getLastRow() + 1;
while(i<=source_last_row){
if(source_sheet.getRange("E"+i).getValue() !="x"){
var source_range = source_sheet.getRange(i,2,1,6); // indicate the columns you'd like to copy
var target_range = target_sheet.getRange(target_last_row,2,1,6); // indicate the columns where you'd like to paste
source_range.copyTo(target_range);
//var new_last_row = target_last_row - 1;
source_sheet.deleteRow(i); // delete source row after copy
i++;
SpreadsheetApp.flush();
target_sheet.getRange('E'+target_last_row).setValue('x'); // insert 'x' back into target
}else{
i++;
}
}
}
else if (ss.getActiveSheet().getName()=="30-Day"){
var source_sheet = ss.getSheetByName("30-Day");
var target_sheet = ss.getSheetByName("Kickoff");
var source_last_row = source_sheet.getLastRow();
var target_last_row = target_sheet.getLastRow() + 1;
while(i<=source_last_row){
if(source_sheet.getRange("E"+i).getValue() !="x"){
var source_range = source_sheet.getRange(i,2,1,6);//indicate the columns you'd like to copy
var target_range = target_sheet.getRange(target_last_row,2,1,6);//indicate the columns where you'd like to paste
source_range.copyTo(target_range);
//var new_last_row = target_last_row - 1;
source_sheet.deleteRow(i); // delete source row after copy
i++;
SpreadsheetApp.flush();
target_sheet.getRange('E'+target_last_row).setValue('x'); // insert 'x' back into target
}else{
i++;
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.