長い処理時間: getValue() とセル挿入への対処
提供されたコードでは、過剰な処理時間の問題は、頻繁なループ内での Range.getValue() メソッドと Range.setValue() メソッドの使用。スクリプトは列 A の各セルをループするため、値の読み取りと書き込みが複数回行われ、実行が大幅に遅くなります。
コードの最適化
このパフォーマンスに対処するにはこの問題を解決するには、サービスへの呼び出しを最小限に抑えることが重要であり、主に Range.getValue() および Range.setValue() 操作の数を減らすことに重点を置いています。コードを最適化する方法は次のとおりです。
バッチ読み取り
range1.getValue() を使用して各セルの値を個別に取得する代わりに、すべてのセルの値を読み取ります。必要なセルを 1 回のバッチ操作で実行できます。たとえば、現在の行と次の 3 行の値が必要な場合は、s.getRange(row 1, 1, 4, 1).getValues() を使用して、それらをすべて一度に取得できます。
バッチ書き込み
同様に、個々のセルの値を設定する代わりに、必要なすべての値を収集します。書き込んでから、1 回のバッチ操作でそれらを割り当てます。たとえば、現在の行と次の 3 行に値を書き込む場合は、 range1.offset(0, 0, 4).setValues([["data 1"], ["data 2"], ["データ 3"]、["データ 4"]]);
最適化の例
これらの最適化を組み込んだコードの最適化バージョンを次に示します。
function format() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = ss.getActiveSheet(); var lastRow = s.getRange("A:A").getLastRow(); var allValues = s.getRange(1, 1, lastRow, 1).getValues(); // Loop through all rows in the spreadsheet for (var row = 0; row < lastRow; row++) { var cellValue = allValues[row][0]; if (typeof cellValue === 'number') { continue; } } }
これらの最適化を使用することにより、を使用すると、サービスの呼び出し数を大幅に減らし、スクリプトのパフォーマンスを向上させることができます。このアプローチにより、サービスの呼び出し数がループあたり 8 からわずか 2 に減り、処理時間が大幅に短縮されます。
以上がGoogle Apps Script を最適化して、頻繁な `getValue()` および `setValue()` 呼び出しによって引き起こされる長い処理時間を短縮するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。