1

列5に情報が入力されている場合は、その行のデータを別のスプレッドシートにコピーする必要があります。私の関数の最初のif()は他の何かのためのもので、情報が列4に入力されたときにデータを並べ替えます。これは機能しますが、他のif()が機能する必要がありますが、機能しません。他の質問ですが、私の状況でうまくいく答えを見つけることができません。

function onEdit(event) {
  var sheet=event.source.getActiveSheet();
  var editedCell=sheet.getActiveCell();
  var columnToSortBy=4;
  var columnToArchive=5;
  var tableRange= "A2:F!";

  if(editedCell.getColumn() == columnToSortBy){
    var range=sheet.getRange(tableRange);
    range.sort( {column : columnToSortBy} );
  }
  else{
    if(editedCell.getColumn() == columnToArchive){
      var rowToBeMoved=editedCell.getRow();
      var rangeToBeMoved=sheet.getRange("A" + rowToBeMoved + ":F" + rowToBeMoved);
      var values=rangeToBeMoved.getValues();
      var archiveSpreadSheet=SpreadsheetApp.openById("0AroBvchobu2edHNXQ3ZUQjI5TWJtWWZwa1UtcExPNnc");
      var archiveSheet=archiveSpreadSheet.getSheetByName("archive");
      archiveSheet.appendRow(values);
    }
  }
}

問題は、2番目のifブロック内の最後の3行にあることを確認しました。「varvalues=rangeToBeMoved.getValues();」という行の後に、その行の後または前のどこかにBrowser.msgBox( "hi")を置くと、そのメッセージが表示されるため、スクリプトの実行が停止するようですが、次の行の後に置くと、表示されません。問題は.openById()にありますか?ヘルプ!

4

1 に答える 1

1

このコードは機能しています:

更新:10-01-2013
getColumnではなくcolumnIndexを使用する必要があります:

function onEdit(event) {
  // set items for current spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var row = sh.getActiveRange().getRowIndex();
  var col = sh.getActiveRange().getColumnIndex();
  var columnToSortBy=4;
  var columnToArchive=5;
  var tableRange= "A2:F!";

  if(col == columnToSortBy){
    var range=sh.getRange(tableRange);
    range.sort( {column : columnToSortBy} );
  }

  if(col == columnToArchive){   
    var rangeToBeMoved=sh.getRange("A" + row + ":F" + row);
    var values=rangeToBeMoved.getValues();
    var archiveSpreadSheet=SpreadsheetApp.openById("your key");
    var archiveSheet=archiveSpreadSheet.getSheetByName("Sheet1");        
    archiveSheet.appendRow(values[0]);
  }
}    

appendRowのみが1D配列を受け入れます。結果はgetRange2D配列になります。(角括弧の間に)ゼロを追加すると、1D配列になります。

于 2013-01-09T21:46:28.213 に答える