0

私は単純に列A2と下位を最初にアルファベット順に並べ、数字で並べることができるGoogleアプリスクリプトを作成しようとしてきました。私は最終的な結果を、例えばソート:A2、B5、H1、A3、A1、B4、B2にしたいと思います。なるために:A1、A2、A3、B2、B4、B5、H1、およびなどアルファベット順と数字順で列を並べ替えるにはどうすればいいですか?

だから、現在、私のコードは次のようになります。

function onOpen(){ 
    var ui = SpreadsheetApp.getUi(); 
    ui.createMenu('Order Adresses') 
    .addItem('Order', 'orderNumber') 
    .addToUi(); 
} 

function orderNumber() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var editedCell = sheet.getActiveCell(); 

    var columnToSortBy = 1; 
    var tableRange = "A2:A500"; // What to sort. 

    if(editedCell.getColumn() == columnToSortBy){ 
    var range = sheet.getRange(tableRange); 
    range.sort({ column : columnToSortBy, ascending: true }); 
    } 
} 

このコードは、私はどちらかで列をソートすることができアルファベット順または数字順。しかし、両方ではありません。たとえば、アルファベット順にソートしますが、1,10,11,12,2,3,4などの順番で次の番号を表示します。

+0

サンプルデータを使って墨塗りされたGoogleシートを共有することができます。また、あなたのデータがこの 'A2、B5、H1、A3、A1、B4、B2'のようになっていて、それをアルファベット順にソートすると、これはすでに' A1、A2、A3、B2、B4、B5、H1'それを2回ソートする必要があります。 –

答えて

1

ソートの実際の動作は問題です。本質的に、あなたは常に文字列をソートし、ソートはそれ自身のシンボルを評価します。あなたがA1、B4、B10を持っていれば、ソートアルゴリズムはA、B、Bを見て、A1を一番上に置きます。それから、B4とB1が見えます。その場合B1が勝ち、すでにB10、B4が得られます。

必要に応じて並べ替えアルゴリズムを再実行する必要があります。許可されている唯一の書式が1文字であれば任意の桁数であれば比較的簡単です。まず、.getValues()を使用してデータの配列を取得する必要があります。単純に1番目の位置の後に文字列を分割すると、2つの列に文字と整数が表示されます。

2d配列を最初に文字で並べ替え、次に数字で並べ替えるだけです。それが完了したら、数字の文字列と.setValues()をシートに戻します。

関連する問題