0

私は私がいるよどのファイルに基づいて、いくつかのautosortingを行うにはを作品コードを、Googleのシートでかなり簡単/シンプルなコードがあると思うものを持っているが、それは半分までかかります。実行する分はです。私はこれを最適化できる方法はありますか?Googleスプレッドシートスクリプト - ソート極端に遅く

は、ここでは、コードです:

function autoSort(sheet) { 
    var data = {}; 

    var sortMap = { 
    "*** Artwork ***": { 
     tableRange: "A5:R100", 
     sortCriteria: [ 
     {column: 12, ascending: true}, 
     {column: 5, ascending: true} 
     ] 
    }, 
    "*** Artists ***": { 
     tableRange: "A3:Z102", 
     sortCriteria: [ 
     {column: 2, ascending: true} 
     ] 
    } 
    }; 

    if (data = sortMap[sheet.getName()]) { 
     sheet.getRange(data.tableRange).sort(data.sortCriteria); 
    } 
} 

function onEdit(e) { 
    var activeSheet = e.source.getActiveSheet(); 
    autoSort(activeSheet); 
} 

答えて

1

は(あなたの例では、* 25 100のような)多数のセルを必要とする何もすべての編集のシートには、パフォーマンスに大きなドラッグになるだろう。 Googleスプレッドシートはデータ操作をキューに入れてサーバーの負荷を軽減する傾向があるため、緑色の光を待つだけの時間がかかります。 Googleでは、シート/スクリプトユーザーには非常に高い計算能力しか提供していません。

私がここで見ることができる唯一の最適化は、ソートする列に対して編集が行われたかどうかを確認することです。

function onEdit(e) { 
    var activeSheet = e.source.getActiveSheet(); 
    var activeRange = e.Range; 
    if ([2, 5, 12].indexOf(activeRange.columnStart) != -1) { 
    autosort(activeSheet); 
    } 
} 

ソートする範囲がすべての編集が行われる場所であれば、これは役立ちません。

より良い方法は、編集時にソートされることを放棄し、その目的でユーザーにcustom menu itemを提供することです。

関連する問題