私はスプレッドシートで並べ替える必要がある日付の列を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);
};
混乱を避けるため、質問のタイトルにある「Javascript」「Script Java」を削除/置き換えてください。 – Pyromonk
まず、セルの値を取得する必要があります。 '.getValues()'を 'sheet.getRange(" Ax:Zy ")'呼び出しに追加する必要があります。範囲。だから、もしあなたが 'var data = sheet 'にするならば。getRange( 'AC9:AE53'); 'あなたは' dateArry'を取り除くことができます。ソートを開始する前に空のセルを探してください。セルを埋めると、 'Date.parse()'を使って日付を取得してソートします(これらの日付文字列に年を追加することを忘れないでください)。あなたの質問を明確にして、より良い回答を与えることができますか? –
こんにちはDean、.getValues()を追加しました。私は最終的に.csvファイルを作成するためにプレーンテキスト形式である必要があるので、このコードで実際の日付で作業していません。したがって、日付は実際には文字列です。ソートされたすべての日付が1週間または2週間以内に表示されるため、年はどちらも使用されず、不要です。 – Clayten