2016-10-07 6 views
0

私はスプレッドシートを読み込むGAS Web Appに取り組んでいます(スプレッドシートに関連付けられておらず、無関係の理由ではありません)。Google Web Appスプレッドシートの読み込みを高速化

は、私はこのように、範囲、そのシートに読み込む、または:

var ss = SpreadsheetApp.openById(ssId); 
dataSheet = ss.getSheetByName('Projects'); 
var data = dataSheet.getRange('A1:BL').getValues(); 

が、私は多くのテストを行って、そして私の軽く人口A1としました:BL5500スプレッドシートを(かなりの数にセルに数十文字のテキストが埋め込まれている場合)、読み込み時間には約6秒かかります。私は名前のついた範囲とたくさんのものを試しましたが、それよりも速くすることはできません。

私が実際に必要とするのは、シートの1列です。次に、必要な行を検索するために検索を行い、その行が必要です。しかし、1列の読み込みには、全体の読み込みとほぼ同じ時間がかかります。これを行うより良い方法はありますか?遅れは問題である。比較のために

SpreadsheetApp.openById(ssid) [0.174 seconds] 
Spreadsheet.getSheetByName([Projects]) [0 seconds] 
Sheet.getRange([A1:BL]) [0.387 seconds] 
Range.getValues() [6.483 seconds] 

、ここではただ一つの列をロードしています:

はここでタイミングの内訳です

SpreadsheetApp.openById(ssid) [0.164 seconds] 
Spreadsheet.getSheetByName([Projects]) [0 seconds] 
Sheet.getRange([A1:A]) [0.336 seconds] 
Range.getValues() [5.887 seconds] 

これらは単なるシングルランがあり、時間差は、(彼らは異なります)重要ではありません。

+0

私は回避策があります:新しいシートを作成しました。その1つの列は検索する列と同じです。私はそれをロードする。検索を完了すると、関連する行だけがシート全体から読み込まれます。それは約8秒から約2までの合計時間を要し、それは受け入れられる可能性があります。 – KeithKeithBoBeith

+0

この解決策を回答として追加してください。 –

+0

また、ssの公開されたcsvを解析する方がはるかに高速であることがわかりました。 –

答えて

0

私が上記のように、私は他人に役立つかもしれない答えを見つけました。 私は2枚目のシート( "ProjectIndex")を作成し、 "プロジェクト"の該当する列を指し示していた2つの列を設定しました(元々は、実際に2つを検索しています)。 私はそのデータをロードし、目的の行を見つけて "Projects"に戻り、必要な行だけをロードします。

var ss = SpreadsheetApp.openById(ssId); 
dataSheet = ss.getSheetByName('ProjectIndex'); 
var data = dataSheet.getRange('A1:B').getValues(); 

... // search data and find row i 

var j = i+1; // account for zero-based array but 1-based row numbering 
var rc = 'A'+j+':BL'+j; // there are BL columns in Projects 
var record = ss.getSheetByName('Projects').getRange(rc).getValues(); 

ProjectIndexをロードする時間:プロジェクトの一つの行ロードする

SpreadsheetApp.openById(ssid) [0.153 seconds] 
Spreadsheet.getSheetByName([ProjectIndex]) [0 seconds] 
Sheet.getRange([A1:B]) [0.282 seconds] 
Range.getValues() [0.504 seconds] 

時間:

Spreadsheet.getSheetByName([Projects]) [0 seconds] 
Sheet.getRange([A4785:BL4785]) [0.513 seconds] 
Range.getValues() [0.352 seconds] 

を私が意図ファイルの下部に行で示さ。 ProjectIndexを非同期で先に読み込むことができるかもしれませんが、それがさらに高速化するかどうかわかりませんし、とにかくそれをやる方法もわかりません。その後の検索は、データが最新であるかどうか不明であることを除いて、原則として高速にすることができます。

関連する問題