2017-06-02 6 views
0

私はスプレッドシートで並べ替える必要がある日付の列を3つ持っています。Google Apps Script Javascriptで日付文字列を昇順に並べ替える方法

まずは水平に並べ替える必要があります。日付は文字列形式です。

「5/3」、「5/20」、「6/3」または時には「ブランク」と表示されます。

いくつかのセルが空白の場合は、一番左の列に移動する必要があります。

次に、日付で行を並べ替える必要があります。 range.sortはこれで問題ありません。

ここに私がこれまで持っているものはありますか?

function sortDate() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("Loads"); 
var range = sheet.getRange("C9:BA53"); 


    //Sorts Horizontally 

    //getValues gives a 2D array. 
    var data = sheet.getRange('AC9:AE53'); 



    //This for loop with loop through each row 
    for(var i=0; i<data.length; i++) 
    { 

    var dateArry = [data[i][0],data[i][1],data[i][2]]; 
      //This for loop with loop through each column 
     //for (var j = 0; j < data[i].length ; j ++){ 
      //This assumes Column AC has the dates you are comparing aganist 

     //dateElem = date.split('/'); 

     //dateElem[1] = Number(dateElem[1]) + 1; 

     //newDate = dateElem.join('/'); 

     var sortDates = dateArry.sort(); 

     sheet.getRange("AC"+i+"AE"+i).setValues(sortDates); 




     }; 
    }; 

更新されたコード:ここで

は私が作った更新です。最も難しいのは、日付の各行をソートすることです。私は、それぞれの日付セットを分離するために2番目のループを追加しました。

function sortDate() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("Loads"); 
//var range = sheet.getRange("C9:BA53"); 


    //Sorts Horizontally 

    //getValues gives a 2D array. 
    var data = sheet.getRange('AC1:AE53').getValues(); 



    //This for loop with loop through each row 
    for(var i=0; i<data.length; i++) { 
     for (var j = 8; j < data[i].length ; j ++){ 

    var dateArry = [data[i][0],data[i][1],data[i][2]]; 

????????行ごとに3つの日付を並べ替えるにはどうすればいいですか?

  var sortDates = dateArry.sort(); 

     //sheet.getRange("AC"+i+":AE"+i).setValues(sortDates); 
     sheet.getRange("AC"+i).setValue(sortDates[0]); 
     sheet.getRange("AD"+i).setValue(sortDates[1]); 
     sheet.getRange("AE"+i).setValue(sortDates[2]); 

     }; 
    }; 

    }; 

更新されたコード2:ここでは

は、プログラムの私の第三の実行です。それはソート時にヌル/空のセルを最初に置く以外は素晴らしいです。残りの部分を昇順に保ちながら、最後にはnullが必要です。ありがとう!!!

例:

inputArray = [ "5/3"、 ""、 "6/2"]

correctOutput = [ "5/3"、 "6/2"、」「]

wrongOutput = [""、 "5/3"、 "6/2"]これは今行っていることです。コードの

第三セット:

function sortDate2() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("Loads"); 
//var range = sheet.getRange("C9:BA53"); 
//Trying to fix improper sorting. works great for alphabetic sorting 


    //Sorts Horizontally 

    //getValues gives a 2D array. 
    var data = sheet.getRange('AC9:AE53').getValues(); 



    //This for loop with loop through each row 
    for(var i=0; i<data.length; i++) { 


    for (var j = 0; j < data[i].length ; j ++){ 

    var dateArry = [data[i][0],data[i][1],data[i][2]]; 





     //var sortDates = dateArry.sort(function(a, b){return a-b}); 
     var sortedDates = dateArry.sort(function (a, b) { 
    // '01/03/2014'.split('/') 
    // gives ["01", "03", "2014"] 
    a = a.split('/'); 
    b = b.split('/'); 
    return a[1] - b[1] || a[0] - b[0] || (a===null)-(b===null) ; 
}); 






     data[i][0] = sortedDates[0]; 
     data[i][1] = sortedDates[1]; 
     data[i][2] = sortedDates[2]; 


     }; 

     }; 

     sheet.getRange('AC9:AE53').setValues(data); 


    }; 
+0

混乱を避けるため、質問のタイトルにある「Javascript」「Script Java」を削除/置き換えてください。 – Pyromonk

+1

まず、セルの値を取得する必要があります。 '.getValues()'を 'sheet.getRange(" Ax:Zy ")'呼び出しに追加する必要があります。範囲。だから、もしあなたが 'var data = sheet 'にするならば。getRange( 'AC9:AE53'); 'あなたは' dateArry'を取り除くことができます。ソートを開始する前に空のセルを探してください。セルを埋めると、 'Date.parse()'を使って日付を取得してソートします(これらの日付文字列に年を追加することを忘れないでください)。あなたの質問を明確にして、より良い回答を与えることができますか? –

+0

こんにちはDean、.getValues()を追加しました。私は最終的に.csvファイルを作成するためにプレーンテキスト形式である必要があるので、このコードで実際の日付で作業していません。したがって、日付は実際には文字列です。ソートされたすべての日付が1週間または2週間以内に表示されるため、年はどちらも使用されず、不要です。 – Clayten

答えて

0

またsort(sortSpecObj)を使用することができます。

は、与えられた範囲内のセルをソートします。与えられた範囲内のセルを指定された列と順序で並べ替えます。

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheets()[0]; 
var range = sheet.getRange("A1:C7"); 

// Sorts by the values in the first column (A) 
range.sort(1); 

// Sorts by the values in the second column (B) 
range.sort(2); 

// Sorts descending by column B 
range.sort({column: 2, ascending: false}); 

// Sorts descending by column B, then ascending by column A 
// Note the use of an array 
range.sort([{column: 2, ascending: false}, {column: 1, ascending: true}]); 

// For rows that are sorted in ascending order, the "ascending" parameter is 
// optional, and just an integer with the column can be used instead. Note that 
// in general, keeping the sort specification consistent results in more readable 
// code. We could have expressed the earlier sort as: 
range.sort([{column: 2, ascending: false}, 1]); 

// Alternatively, if we wanted all columns to be in ascending order, we would use 
// the following (this would make column 2 ascending) 
range.sort([2, 1]); 
// ... which is equivalent to 
range.sort([{column: 2, ascending: true}, {column: 1, ascending: true}]); 

私も@Deanに同意、ソートすることが容易になりますDate.parse()使用:ここで

は、文書からの抜粋です。

これが役に立ちます。

+0

私は私のポストで、私はすでにこれを行う方法を知っていた。日付を水平に並べ替えるのに役立つ必要があります。 – Clayten

関連する問題