[]
SpreadJS는 다른 워크북의 데이터를 참조하여 값을 계산하는 수식을 지원합니다. 이러한 수식은 통합 문서 간 수식이라고 하며, 다음 구문을 통해 사용할 수 있습니다.ChatGPT에게 묻기
'filePath[workbookName]sheetName'!CellOrRangeAddress
예시: “=[Calc.xlsx]Sheet1!A1”, “=[Calc.xlsx]Sheet1!A1:B3”
참고: 교차 워크북 참조는 동적 배열 흘림(dynamic array spill)이나 INDIRECT 함수는 지원하지 않습니다.
워크북 JSON을 사용하여 외부 소스의 데이터를 설정하거나 업데이트할 수 있습니다. updateExternalReference 메서드는 다음과 같은 매개변수를 받습니다.
매개변수 | 설명 |
---|---|
linkName | 외부 소스의 파일 이름을 나타내며, 주로 ".xlsx"로 끝납니다. |
data | 외부 소스의 JSON 데이터를 나타냅니다. 이는 |
filePath | 파일의 경로 또는 링크를 나타냅니다. 이 매개변수의 값은 중복된 linkNames가 없을 경우 null일 수 있습니다. |
isMergeUpdate | 병합하여 업데이트할지 여부를 나타냅니다. 이 매개변수가 false로 설정되면 외부 시트의 전체 데이터가 덮어씌워진다는 점에 유의하세요. |
다음 GIF는 "Workbook 1"에서 A1 셀이 업데이트될 때 "Workbook 1"과 "Workbook 2"에 설정된 외부 참조가 어떻게 업데이트되는지 보여줍니다.
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");
또한, isMergeUpdate
매개변수를 true
로 설정하여 외부 소스의 데이터를 부분적으로 업데이트할 수 있습니다. 다음은 통합 문서 간 수식을 설정하고 외부 소스의 일부 데이터를 업데이트하는 예시입니다.
var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 });
spread.getActiveSheet().setFormula(0, 0, "=SUM('D:\\[calc.xlsx]Sheet1'!A1:B2");
// Spread의 A1 셀 값이 #REF!입니다.
spread.updateExternalReference("calc.xlsx", { "Sheet1": [[1, 2], [1, 3]] });
// Spread의 A1 셀 값은 7입니다.
spread.updateExternalReference("calc.xlsx", { "Sheet1": [[], [11, 13]] }, "D:\\" /* or null*/, true);
// Spread의 A1 셀 값은 27이며, 외부 데이터는 다음과 같습니다: {"Sheet1":[[1, 2],[11, 13]]}
spread.updateExternalReference("calc.xlsx", { "Sheet1": [[], [1, 13]] }, null /* or "D:\\" */);
// Spread의 A1 셀 값은 14이며, 외부 데이터는 다음과 같습니다: {"Sheet1":[[null, null],[1, 13]]}
현재 워크북의 통합 문서 간 참조 목록을 가져올 수 있습니다. getExternalReferences 메서드는 통합 문서 간 참조의 파일 이름과 파일 경로를 포함하는 객체 배열을 반환합니다.
다음 코드는 현재 워크시트에서 사용된 외부 참조 목록을 가져오는 방법을 보여줍니다.
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());
// 결과:
// Array(2)
// 0: { name: 'Jackson.xlsx', filePath: '' }
// 1: { name: 'Petrosky', filePath: '' }
SpreadJS Designer는 데이터(DATA) > 쿼리 및 연결(Queries & Connections) 그룹의 링크 편집(Edit Links) 옵션을 통해 워크시트에서 교차 워크북 값을 업데이트하는 데 도움을 줍니다.
다음과 같은 대화 상자를 열어 소스를 업데이트할 수 있게 해줍니다.