トリガーされない編集アクションが多数ありますonEdit()
。これは包括的なリストではありません。さらに多くの除外が報告されています。
スプレッドシートの行数を知りたい場合は、実行に約 120 ミリ秒かかります。
var numCols = SpreadsheetApp.getActiveSheet().getRange("1:1").getLastColumn();
var numRows = SpreadsheetApp.getActiveSheet().getRange("A:A").getLastRow();
ScriptDB を使用するよりもシートに値を書き込む方が高速であることは既に示しました。約 1 ミリ秒の小さな範囲を書き込むのに、わずかな時間がかかると予想できます。
したがって、行または列が追加されていることを検出できれば、変更を登録するのに 10 分の 2 秒もかかりません。これonEdit()
は、スプレッドシートの範囲を測定する手法を示し、シートの寸法の変化を報告します。(行または列をテスト、追加または削除してから、 をトリガーする編集を行いますonEdit()
。) タイマーも含まれています。値を測定および/または保存する他の方法を自由に試して、最適な方法を確認してください。
function onEdit() {
// Use start & stop to time operations
var start = new Date().getTime();
// We want the size of the sheet, so will select ranges across and down the
// whole sheet. Cannot use getDataRange(), as it selects only occupied cells.
var numCols = SpreadsheetApp.getActiveSheet().getRange("1:1").getLastColumn()
var numRows = SpreadsheetApp.getActiveSheet().getRange("A:A").getLastRow();
var stop = new Date().getTime();
var timeToMeasure = (stop-start);
// Did things change?
var oldSize = SpreadsheetApp.getActiveSheet().getRange("A1:B1").getValues();
if (oldSize[0][0] != numCols || oldSize[0][1] != numRows) {
// Yes, they did - Let's store the new dimensions
start = new Date().getTime();
SpreadsheetApp.getActiveSheet().getRange("A1:B1").setValues([[numCols,numRows]]);
var stop = new Date().getTime();
var timeToStore = (stop-start);
Browser.msgBox("Sheet is "+numCols+" by "+numRows+"."
+" ("+timeToMeasure+"ms to measure, "+timeToStore+"ms to store.)");
}
}