SpreadJS製品ヘルプ
クロスワークブック数式
関数リファレンス > 数式の概要 > クロスワークブック数式

SpreadJSは、複数のワークブックのデータを参照して値を計算する数式をサポートします。これらの数式はクロスワークブック数式と呼ばれ、次の構文で使用できます。

'filePath[workbookName]sheetName'!CellOrRangeAddress

例: “=[Calc.xlsx]Sheet1!A1”, “=[Calc.xlsx]Sheet1!A1:B3”

メモ:クロスワークブック参照は、動的配列スピルやINDIRECT関数をサポートしません。

参照の更新

ワークブックをシリアル化したJSONデータを使用して、外部ソースのデータを設定または更新できます。updateExternalReferenceメソッドは、リンク名、JSONデータ、ファイルパスなどのパラメーターを受け取ります。

次の図とサンプルコードは、「ワークブック1」でA1セルが更新された場合に、SpreadJSがどのように「ワークブック1」と「ワークブック2」で設定された外部参照を更新するかを示しています。

JavaScript
コードのコピー
var spread1 = new GC.Spread.Sheets.Workbook(document.getElementById('ss1'), { sheetCount: 1 });
var spread2 = new GC.Spread.Sheets.Workbook(document.getElementById('ss2'), { sheetCount: 1 });
            
// Spread1のセルA1に値を設定します。
spread1.sheets[0].setValue(0, 0, 5);

var spread1Task;
function updateSpread1() {
    if (!spread1Task) {
        spread1Task = setTimeout(() => {
            spread1.updateExternalReference("calc.xlsx", spread2.toJSON());
            spread1Task = null;
        })
    }
}
var spread2Task;
function updateSpread2() {
    if (!spread2Task) {
        spread2Task = setTimeout(() => {
            spread2.updateExternalReference("result.xlsx", spread1.toJSON());
            spread2Task = null;
        })
    }
}

spread1.bind(GC.Spread.Sheets.Events.ValueChanged, updateSpread2)
spread1.bind(GC.Spread.Sheets.Events.RangeChanged, updateSpread2)
spread2.bind(GC.Spread.Sheets.Events.ValueChanged, updateSpread1)
spread2.bind(GC.Spread.Sheets.Events.RangeChanged, updateSpread1)

// サンプル。
spread1.updateExternalReference("calc.xlsx", spread2.toJSON());
spread2.updateExternalReference("result.xlsx", spread1.toJSON());
spread1.sheets[0].setFormula(1, 0, "='[calc.xlsx]Sheet1'!A1");
spread2.sheets[0].setFormula(0, 0, "='[result.xlsx]Sheet1'!A1^2");

参照の取得

現在のワークブックにあるクロスワークブック参照の一覧を取得するには、クロスワークブック参照のファイル名とファイルパスを含むオブジェクトの配列を返すgetExternalReferencesメソッドを使用できます

次のサンプルコードは、現在のワークシートで使用されている外部参照の一覧を取得する方法を示します。

JavaScript
コードのコピー
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 1 });
var sheet = spread.getActiveSheet();
sheet.setFormula(0, 0, "='[Jackson.xlsx]Sheet1'!A1");
sheet.setFormula(1, 0, "='[Petrosky]Sheet1'!A1");
console.log(spread.getExternalReferences());
// 出力:
// 配列(2)
// 0: { name: 'Jackson.xlsx', filePath: '' }
// 1: { name: 'Petrosky', filePath: '' }

SpreadJSデザイナの使用

SpreadJSデザイナでは、[データ]タブの[クエリと接続]リボングループの[リンクの編集]オプションを使用してワークシート内のクロスワークブック値を更新できます。

次のダイアログが表示され、ソースを更新できます。