0

イベントの 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++;
        }
      };
    }
}
}

それだけです - ここでさらに問題が発生します。行がターゲット シートにプッシュされ、ターゲット シートでチェックオフされた場合、ターゲット シートから消えて、ソース シートの元の行にプッシュされたことを示すようにしたいチェックオフ。また、以前に空白だった行がソース シートでチェックされた場合、ターゲット シートにプッシュされたコピーが消えるようにしたいと考えています。これは私がかなり迷子になり始めるところです。それを実装するにはどうすればよいですか?

4

1 に答える 1

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++;
        }
      }
    }
  }
}
于 2013-01-02T05:37:48.093 に答える