2017-04-02 16 views
2

今日の日付の値に基づいて、同じスプレッドシート内のあるシートから別のシートにデータ行を移動しようとしています。今日の日付に基づいてGoogleスプレッドシートの行を移動する

"A"列には、日付があります。列「A」に入力された日付が今日の日付よりも古い場合、行を移動したいです。 (これは航空機のフライトスケジュールで、過去に発生したフライトを「過去のフライト」というシートに移動したい)。アクティブシートの名前は「フライトスケジュール」です。

行を移動した後、「フライトスケジュール」シートを削除します。私はスクリプトを追加する場所を知っていますが、これをどうやって行うのか分かりません。

これは私が試みたものです。 data.link使用する権利ものではありません「(data.link> 1 ...場合は」私はライン上だと思う。しかし、私は今日の日付より古い指示するために何かを見つけることができません。

function approveRequests() { 
var ss = SpreadsheetApp.getActiveSpreadsheet() 
sheet = ss.getActiveSheet(), 
sheetName = sheet.getName(), 
data = sheet.getDataRange().getValues(); 
if (sheetName == "Flight Shedule") { 
    var range = sheet.getActiveRange(), 
    startRow = range.getRowIndex(), 
    numRows = range.getNumRows(), 
    numCols = range.getNumColumns() 
    if (numCols == 9) { 
    if (data.length > 1) { 
    var values = range.getValues(), 
    nextSheet = ss.getSheetByName("Past Flight"), 
    lastRow = nextSheet.getLastRow(); 
nextSheet.getRange(lastRow+1,1,numRows,3).setValues(values); 
sheet.deleteRows(startRow,numRows); 
    } 
    } 
} 
} 

どれをヘルプが巨大になります!

ありがとう!

+0

これはGoogleスプレッドシートに追加する必要があります。 –

+1

スクリプトの作成に関する具体的な助けを求めている場合は、これまでに試したことを示すコードを投稿すると、より良い回答が得られます。 – trevorc

+0

ありがとうございます。私が試したことを追加することを考えていたはずです。 –

答えて

1

[OK]を、私は最初にあなたの現在のコードに基づいて、いくつかの一般的なヒントで行きます。

あなたの機能では、あなたがすでに持っているので、冗長であるsheet = ss.getActiveSheet()を行いますSpreadsheetApp.getActiveSpreadsheet()。これを避けることをお勧めします。

この賛成の
var ss = SpreadsheetApp.getActiveSpreadsheet() 
sheet = ss.getActiveSheet(), 
sheetName = sheet.getName(), 
data = sheet.getDataRange().getValues(); 

:ミスをせずに読んで変更することがはるかに簡単です

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getActiveSheet(); 
var sheetName = sheet.getName(); 
var data = sheet.getDataRange().getValues(); 

data.lengthは、現在の日付とは関係なく、単に配列の長さになります。したがって、1行のデータを選択すると、1になります.2行を選択すると、2などになります。.getValues()は、data[row][col]の配列を返します。あなたが探しているのは、飛行時間の値を取得して、それを日付オブジェクト(Google固有のものではなく一般的なjavascript)に変換することです。次に、var now = new Date()を使用し、2つを比較してください。

ifのステートメントを再考することをおすすめします。行を手動で選択してから実行するよりも、行データを取得する方がはるかに優れています。実際にこれを自動的に実行させる場合は、多くの行のコードを保存することができます。これは、手動で呼び出されたときにのみ実行されるためです。

+0

ありがとうございます。まだ私のチョップを取得し、これは便利でした! –

0

このサンプルが機能している:

function approveRequests() { 

    // Initialising 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var scheduleSheet = ss.getSheetByName("Flight Shedule"); 
    var pastSheet = ss.getSheetByName("Past Flight"); 
    var lastColumn = scheduleSheet.getLastColumn(); 

    // Check all values from your "Flight Schedule" sheet 
    for(var i = scheduleSheet.getLastRow(); i > 0; i--){ 

    // Check if the value is a valid date 
    var dateCell = scheduleSheet.getRange(i, 1).getValue(); 
    if(isValidDate(dateCell)){ 
     var today = new Date(); 
     var test = new Date(dateCell); 

     // If the value is a valid date and is a past date, we remove it from the sheet to paste on the other sheet 
     if(test < today){ 

     var rangeToMove = scheduleSheet.getRange(i, 1, 1, scheduleSheet.getLastColumn()).getValues(); 
     pastSheet.getRange(pastSheet.getLastRow() + 1, 1, 1, scheduleSheet.getLastColumn()).setValues(rangeToMove); 
     scheduleSheet.deleteRow(i); 

     } 
    } 
    } 
} 

// Check is a valid date 
function isValidDate(value) { 
    var dateWrapper = new Date(value); 
    return !isNaN(dateWrapper.getDate()); 
} 

をそうです、それは(いくつかのsheet.getRange()メソッドの使用の原因)最適化されたソリューションではありませんが、それは作業と明確なコードを持ってすることができます。

+0

これは非常に役に立ちました!私は正しい場所に近づくように! –

関連する問題