2016-07-08 6 views
1

私は4枚のGoogleスプレッドシートを持っています。 「メイン」シートには、データが最初の11列に自動的にダンプされます。第12列は手動移動トリガとして設定され、選択された列データを行ごとに対象シート(他の3枚のシートの1つ)に移動します。私は、選択したターゲットシートに必要な列、たとえば列1,4,9および10を移動できます。ただし、これらはデータが移動するときにターゲットシートに配置される列です。代わりに、データをターゲットシートの最初の4列に移動します。私は数多くのフォーラムを検索しましたが、これが可能かどうかはわかりません。これは私の現在のスクリプトです:Googleスクリプトは行を別のスプレッドシートに移動します。列の並べ替え

function onEdit() { 

    // base definitions 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var editedSheet = ss.getActiveSheet(); 
    var editedCell = editedSheet.getActiveCell(); 
    var wordInCell = editedCell.getValue().toString(); 
    var moveSheet = "Main"; 
    var moveColumn = 12; 
    var moveWords = ["move5x", "move6x", "moveas"]; 
    var targetSheets = ["5x", "6x", "Assigned"]; 

    // if the edit was mot in the moveSheet jump out 
    var sheetIndex = moveSheet.indexOf(editedSheet.getName()); 
    if (sheetIndex == -1) return; 

    // if the edit was mot in the move column jump out 
    if (editedCell.getColumn() != moveColumn) return; 

    // if the value in editedCell isn't one of the move words, jump out 
    var moveWordsIndex = moveWords.indexOf(wordInCell); 
    if (moveWordsIndex == -1) return; 

    // if the value in editedCell is one of the move words, set up columnsToMove 
    var columnsToMove; 
    if (moveWordsIndex == 0 || moveWordsIndex == 1) {columnsToMove = [[1, 4], [8, 8]]}; 
    if (moveWordsIndex == 2) {columnsToMove = [[1, 1], [4, 4], [9, 10]]}; 

    // copy data from editedSheet's sourceRow to targetSheet's targetRow 
    var sourceRow = editedCell.getRow(); 
    var targetSheet = ss.getSheetByName(targetSheets[moveWordsIndex]); 
    var targetRow = targetSheet.getLastRow(); 
    targetSheet.insertRowAfter(targetRow++); 
    for (var i = 0; i < columnsToMove.length; i++) { 
    var startColumn = columnsToMove[i][0]; 
    var numColumns = columnsToMove[i][1] - startColumn + 1; 
    var numCopiedColumns = columnsToMove.length; 
    var rangeToCopyFrom = editedSheet.getRange(sourceRow, startColumn, 1, numColumns); 
    var rangeToCopyTo = targetSheet.getRange(targetRow, startColumn, 1, numColumns); 
    rangeToCopyFrom.copyTo(rangeToCopyTo); 
    } 
} 

私が思いつく限りの方法をrangeToCopyTo操作しようとしたが、結果は私が探しているものをされることはありません。 選択した列の並べ替えが可能であるかどうかは知りませんか?そうであれば、私は少なくともそれをする正しい道を歩いていますか? ありがとう

+0