[]
SpreadJS は、依存値 (数式で参照されるセル、値、または名前) のいずれかが変更されると、数式を自動的に更新します。ただし、数式が再計算されるタイミングを制御する場合は、自動計算を手動に切り替えることができます。SpreadJS API の CalculationMode
列挙体を使用すると、計算オプションを自動または手動として設定できます。
CalculationMode
をデフォルトモードの「auto」に設定すると、SpreadJS は参照されるセルが、コピーまたは貼り付けやセル入力などで変更されるたびにすべてのダーティセルを自動的に計算します。SpreadJSは、変更されたセルと、その結果、再計算が必要になったセルをダーティと見なすことに注意してください。
計算モードが「manual」 に設定されている場合、SpreadJSは、明示的に要求した場合のみ数式を計算して更新します。本機能は、多数の複雑な数式を含むワークシートにおいて、頻繁な再計算によってパフォーマンスに影響がある場合に、応答性を向上させるために役立ちます。たとえば、SpreadJS は、値の切り取りまたはコピー・貼り付け中に数式とセル値を更新しますが、数式は再計算しません。
type=warning
メモ:SpreadJSは、Excelへのエクスポートする場合でもCalculationModeオプションをサポートします。
次のサンプルコードは、ワークブックを初期化する際に手動計算を設定する方法を示します。
// ワークブックを初期化する際に手動計算を設定します。
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), {calculationMode: GC.Spread.Sheets.CalculationMode.manual});
または
spread.options.calculationMode = GC.Spread.Sheets.CalculationMode.manual;
手動計算モードに切り替えると、CalculationType
列挙値をパラメーターとして受け入れる calculate()
メソッドを使用して、ワークシート内の数式を手動で更新する必要があります。CalculationType
列挙体は、計算の種類を指定します。この列挙体の使用可能なメンバーを以下に示します。
メンバー | 説明 |
---|---|
all | 範囲内にあるすべてのセルを計算用にダーティとしてマークします。 デフォルトの計算タイプです。 |
rebuild | 範囲内のすべての数式を再構築し、計算のためにダーティとしてマークします。 |
minimal | 数式をダーティとしてマークしますが、揮発性セルおよび循環参照セルを計算用にダーティとしてマークしません。 |
regular | 揮発性セルおよび循環参照セルを計算用にダーティとしてマークします。 |
次の表では、さまざまな数式とその依存関係で自動および手動計算モードを使用する場合のSpreadJSの動作を説明します。
使用した数式 | 自動モード(デフォルト) | 手動モード |
---|---|---|
suspendCalcService(true) | 計算処理を無効にし、セルを再計算しません。 | |
resumeCalcService(false) | 計算処理を有効にして、揮発性セル、循環参照セル、およびダーティセルを計算します。 | 計算処理を有効にし、揮発性セルをダーティとしてマークしますが、ダーティセルを計算しません。 |
resumeCalcService(true) | 計算処理を有効にして、すべてのセルを計算します。 | 計算処理を有効にし、すべてのセルをダーティとしてマークしますが、ダーティセルを計算しません。 |
resumeCalcService(false) と sheet.setFormula | 数式とその依存関係を計算します。 | 数式を計算します。 |
resumeCalcService(false) と spread.calculate() | 開いている全ワークシートのすべての数式を計算します。 | |
resumeCalcService(false) と spread.calculate(GC.Spread.Sheets.CalculationType.regular) | ダーティとしてマークされているすべてのセルを計算します。ダーティセルとは、揮発性または変化するデータに依存しているセルと、プログラムによってダーティとしてマークされているセルです。 | |
resumeCalcService(false) と spread.calculate(GC.Spread.Sheets.CalculationType.rebuild) | スプレッドシート内のすべての数式を再構築して計算します。 | |
resumeCalcService(false) と spread.calculate(null, “Sheet1“) | シート1のすべての数式をダーティにマークし、次にダーティな依存関係を範囲外にマークします。 | シート1のすべての数式をダーティにマークし、範囲外はダーティな依存関係にマークします。ダーティセルのすべてを計算します。 シート1 のダーティセルを計算します。他のセルをダーティ状態にします。 |
type=warning
メモ: セル内の数式を再計算する場合、既存の sheet.recalcAll() メソッドは SpreadJS v16.2 リリースから非推奨となりました。その代わりに、v16.2以降のバージョンではspread.calculate() メソッドを使用できます。
次のサンプルコードは、SpreadJS で使用する複数の計算モードとタイプを使用した計算を示します。
spread.sheets[0].setFormula(0,0,"RAND()");
spread.sheets[0].setFormula(1,0,"=Sheet2!A1");
spread.sheets[0].setFormula(2,0,"=1+2");
spread.sheets[1].setFormula(0,0,"RAND()");
spread.sheets[1].setFormula(1,0,"=Sheet1!A1");
// セルがすべて再計算されます。
spread.calculate(); spread.calculate(GC.Spread.Sheets.CalculationType.regular);
// Sheet1!A1 Sheet2!A2は新しい番号に評価されます。Sheet1!A2 Sheet1!A3は評価されます。
spread.calculate(GC.Spread.Sheets.CalculationType.all, "Sheet1");
// Sheet1!A1 Sheet2!A2は新しい番号に評価されます。
spread.calculate(GC.Spread.Sheets.CalculationType.regular, "Sheet1!A1");
// どのセルも評価されません。
spread.calculate(GC.Spread.Sheets.CalculationType.regular, "Sheet1!A2");
// Sheet1!A1は新しい番号に評価されます。Sheet1!A2 Sheet1!A3は評価されますが、変更されません。Sheet2!A2 は手動モードでダーティのままになります。
spread.calculate(GC.Spread.Sheets.CalculationType.all, "Sheet1");
// Sheet1!A1は新しい番号に評価されます。Sheet2!A2は手動モードでダーティのままになります。
spread.calculate(GC.Spread.Sheets.CalculationType.regular, "Sheet1");
// Sheet2!A2はダーティので評価されます。
spread.calculate(GC.Spread.Sheets.CalculationType.minimal);
デザイナを使用して必要な計算オプションを設定するには、[数式]>[計算方法]タブグループ内にある[計算方法の設定]ボタンを選択します。
手動計算モードの場合、再計算するワークブックのセクションを選択する必要があります。
開いているすべてのワークシートを更新するには、[再計算実行]ボタンをクリックします。
同じワークシートを更新するには、[シート再計算]ボタンをクリックします。