[]
SpreadJS は、Workbook
クラスの incrementalCalculation
プロパティを true に設定することで、実行中に計算全体をセグメントに分割する増分計算をサポートしています。これにより、計算タスクが膨大な場合でも、ユーザーの操作に応答できるようになります。
セルを増分的に計算し、UI イベントに応答することができます。これにより、ブックに多数の数式が含まれている場合に UI がフリーズするのを防ぐことができます。計算が保留中のセルがあるときにセルが更新されると、更新されたセルとその依存セルが計算タスクに追加されます。ただし、行/列またはシートを挿入または削除し、次の計算で調整された数式が使用される場合、保留中の計算は破棄されます。
incrementalCalculation
プロパティを true に設定すると、CalculationProgress
イベントを使用して進行状況を追跡できます。
次のサンプルコードは、CalculationProgress
イベントで進行状況を追跡する方法を示しています。
// この例では、CalculationProgress イベントを使用して計算の進行状況をログに記録します。
spread.options.incrementalCalculation = true;
spread.bind(GC.Spread.Sheets.Events.CalculationProgress, function (e, info) {
var msg = "Calculate ";
if (info.pendingCells === 0) {
msg += "finished";
} else if (info.iterate >= 0) {
msg += info.pendingCells + " cells in iterative calculation round " + info.iterate;
} else {
msg += (info.totalCells - info.pendingCells) + "/" + info.totalCells + "cells";
}
console.log(msg);
});
incrementalCalculation
プロパティが true に設定されている場合、計算の進行状況を示すために、ステータス バーに増分計算も表示されます。
次のコード サンプルは、SpreadJSをステータス バーに連結して、計算の進行状況を自動的に表示する方法を示しています。
// ステータス バーを初期化し、SpreadJSに連結します。
var statusBar = new GC.Spread.Sheets.StatusBar.StatusBar(document.getElementById('statusBar'));
statusBar.bind(spread);
非循環参照セルの場合: 計算の進行状況は、次の画像に示すようにパーセンテージ形式で表示されます。
循環参照セルの場合: iterativeCalculation
を true に設定することで反復計算が実装され、次の GIF画像 に示すように、反復ラウンドで計算の進行状況が表示されます。
次のサンプルコードは、循環参照の iterativeCalculation
を設定する方法を示しています。
// 反復計算を有効にします。
spread.options.iterativeCalculation = true;
spread.options.iterativeCalculationMaximumIterations = 24;