[]
        
(Showing Draft Content)

増分計算

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);

非循環参照セルの場合: 計算の進行状況は、次の画像に示すようにパーセンテージ形式で表示されます。

incrementalcalculation-noncircular


循環参照セルの場合: iterativeCalculation を true に設定することで反復計算が実装され、次の GIF画像 に示すように、反復ラウンドで計算の進行状況が表示されます。

incrementalcalculation-circular

次のサンプルコードは、循環参照の iterativeCalculation を設定する方法を示しています。

// 反復計算を有効にします。
spread.options.iterativeCalculation = true;
spread.options.iterativeCalculationMaximumIterations = 24;