[]
        
(Showing Draft Content)

통합 문서 간 수식

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 데이터를 나타냅니다.

이는 spread.toJSON()일 수 있으며, 또는 데이터는 data[sheetName][rowIndex][colIndex]로 가져올 수 있습니다.

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 디자이너 컴포넌트 사용하기

SpreadJS Designer는 데이터(DATA) > 쿼리 및 연결(Queries & Connections) 그룹의 링크 편집(Edit Links) 옵션을 통해 워크시트에서 교차 워크북 값을 업데이트하는 데 도움을 줍니다.



다음과 같은 대화 상자를 열어 소스를 업데이트할 수 있게 해줍니다.