有条件地将行复制到另一个工作表,并在更新行后删除它们

时间:2013-01-01 23:27:52

标签: javascript google-apps-script google-sheets

我有一张电子表格,其中有一份清单,可在活动开始前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++;
        }
      };
    }
}
}

就是这样 - 虽然这里遇到了更多麻烦。如果一行已被推到目标工作表并在目标工作表上被检查,我希望它从目标工作表中消失并且我希望源工作表中的原始行现在显示它已经存在检查。此外,如果在源表上检查了以前空白的行,我希望已推送到目标表的副本消失。这是我开始迷失的地方。我将如何实施?

1 个答案:

答案 0 :(得分:0)

认为你会想要改变...

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