如何在Google Apps脚本Javascript中按顺序对日期字符串进行排序

时间:2017-06-02 04:36:03

标签: javascript arrays google-apps-script google-sheets-api

我需要在电子表格中排序3列日期。

首先,我需要水平排序。日期是字符串格式。

e.g。 “5/3”,“5/20”,“6/3”或有时是BLANK。

如果某些单元格为空白,我需要将所有内容移动到最左侧的列中。

其次,我需要按日期对行进行排序。 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);




         };
    };

更新代码:

以下是我所做的更新。最难的部分是对每行日期进行排序。我添加了第二个for循环来分隔每组日期。

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 / empty单元格。我需要在结束时使用null,同时保持其余的按升序排列。感谢!!!

示例:

inputArray = [“5/3”,“”,“6/2”]

correctOutput = [“5/3”,“6/2”,“”]

incorrectOutput = [“”,“5/3”,“6/2”]这就是它现在正在做的事情。

第3组代码:

 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);


  };

1 个答案:

答案 0 :(得分:0)

您还可以使用 sort(sortSpecObj)

  

对给定范围内的单元格进行排序。按指定的列和顺序对给定范围内的单元格进行排序。

以下是该文档的摘录:

@RequestMapping("/dumb")
public String dumb() {
    Map<String, String> env = System.getenv();
    String host = env.getOrDefault("SPACY_HOST", "localhost");
    String port = env.getOrDefault("SPACY_HOST", "7890");
    String url = String.format("http://%s:%s", host, port);

    String content = "Hello, World!";

    URI uri = UriComponentsBuilder.fromHttpUrl(url).queryParam("content", content).build().encode().toUri();

    RestTemplate restTemplate = new RestTemplate();

    String response = restTemplate.getForObject(uri, String.class);
    logger.info("I got: {}", response);

    return response;
}

@RequestMapping("/decode")
public Boolean decode() {
    RestTemplate restTemplate = new RestTemplate();

    Message response = restTemplate.getForObject("http://localhost:8080/dumb", Message.class);
    logger.info("I got: {}", response);

    return Boolean.TRUE;
}

我也同意@Dean,使用 Date.parse() 可以更轻松地进行排序。

希望这有帮助。