# Excel 호환성

## Content

SpreadJS는 가져오기 및 내보내기 과정에서 Excel 가상 분석 데이터 표와 `SJS.TABLE` 수식 간의 변환을 수행합니다.

## Excel에서 가져오기

가상 분석 데이터 표가 포함된 Excel 통합 문서를 열면 SpreadJS는 각 데이터 표를 동등한 `SJS.TABLE` 수식으로 변환합니다.
생성되는 수식 유형은 Excel 파일 버전과 `allowDynamicArray` 설정에 따라 달라집니다.

| Excel 파일 유형 | allowDynamicArray | SpreadJS에서의 결과 |
| --------------- | ----------------- | ------------------ |
| Excel 2019 이하에서 생성 | false | `{}`로 둘러싸인 레거시 배열 수식으로 가져옵니다. |
| Excel 365 이상에서 생성 | true | 자동으로 확장되는 동적 배열 수식으로 가져옵니다. |

두 경우 모두:

* 원본 Excel 파일의 계산 결과가 유지됩니다.
* 수식은 SpreadJS에서 정상적으로 다시 계산됩니다.

## Excel로 내보내기

SpreadJS 통합 문서를 내보낼 때 SpreadJS는 각 `SJS.TABLE` 수식을 기본 Excel 데이터 표로 변환하려고 시도합니다.
변환에 성공하면:

* 생성된 `.xlsx` 파일에 표준 Excel 데이터 표가 포함됩니다.
* 파일은 Excel에서 정상적으로 열리고 예상대로 동작합니다.

변환에 실패하면:

* `SJS.TABLE` 수식이 내보낸 파일에 그대로 유지됩니다.
* Excel은 수식 텍스트를 표시하지만 기본 데이터 표로 인식하지는 않습니다.

변환은 가능한 범위 내에서 수행되며 Excel의 구조적 제한 사항에 영향을 받습니다.

## 변환이 불가능한 조건

다음 조건 중 하나라도 만족하면 `SJS.TABLE`에서 Excel 데이터 표로의 변환에 실패합니다.

* 수식에 시트 간 참조가 포함된 경우
    (Excel 데이터 표는 다른 워크시트에 대한 참조를 지원하지 않습니다.)
* 수식에 두 개를 초과하는 `inputs` / `input_cell` 쌍이 포함된 경우
    (Excel은 단일 변수 및 이변수 데이터 표만 지원합니다.)
* 참조된 범위를 유효한 워크시트 주소로 확인할 수 없는 경우
* 입력값 범위가 Excel에서 요구하는 데이터 표 레이아웃 구조와 일치하지 않는 경우
    (예: 상단 행 또는 왼쪽 열 구조가 없는 경우)
* `input_cell`이 데이터 표 결과 영역 내부에 위치하는 경우
    (단일 변수 데이터 표의 좌상단 위치는 예외)

>type=info
> 팁: Excel과의 왕복 호환성이 필요한 경우 `SJS.TABLE` 사용을 하나 또는 두 개의 입력 쌍으로 제한하고 시트 간 참조를 피하세요.

## 기능 제한 사항

다음 제한 사항은 Excel 호환성과 관계없이 적용됩니다.

### 비동기 함수

`SJS.TABLE`은 비동기 함수와 함께 사용하는 것을 지원하지 않습니다.
`result_reference` 또는 해당 종속 셀에 `defaultValue` 또는 `setAsyncResult`에 의존하는 비동기 함수가 포함되어 있으면 반환 결과를 예측할 수 없을 수 있습니다.
데이터 표 계산에서는 동기 수식만 사용하세요.

### Calc Worker 지원

`SJS.TABLE`은 SpreadJS Calc Worker 환경에서 완전히 지원됩니다. 별도의 추가 설정은 필요하지 않습니다.