# 문서 속성 관리 

## Content

문서 속성(Document Properties)은 워크북에 대한 제목, 작성자, 주제 등과 같은 정보를 포함합니다. SpreadJS는 이러한 속성을 워크북 내에서 관리할 수 있도록 지원합니다.
문서 속성을 관리하기 위해 SpreadJS는 `docProps` 속성을 제공합니다. 이 속성은 [IDocProps](/spreadjs/api/v18/interfaces/GC.Spread.Sheets.IDocProps) 인터페이스 타입이며, `coreDocProps`, `appDocProps`, `customDocProps` 등의 속성을 통해 문서 정보를 사용자 정의할 수 있습니다.

* **기본 문서 속성(Core Document Properties)**: 제목, 작성자, 키워드 등 문서의 기본적인 정보를 나타냅니다.
* **앱 문서 속성(App Document Properties)**: 관리자, 회사 정보 등 문서 관리에 특화된 속성입니다.
* **사용자 정의 문서 속성(Custom Document Properties)**: 다양한 데이터 타입으로 저장할 수 있는 사용자 정의 속성입니다.

### 코드 사용 예

다음 코드는 문서 속성을 설정하는 방법을 보여줍니다.

```javascript
// 기본 문서 속성 설정
spread.docProps.coreDocProps = {
    title: 'Sample Document',
    creator: 'Admin',
    keywords: 'sample, document',
    subject: 'Sample Subject',
    description: 'This is a sample document',
    category: 'Sample Category',
    contentStatus: 'Draft',
    created: '11/01/24',
    lastPrinted: '20/01/24',
    modified: '21/01/24',
    lastModifiedBy: 'John'
};

// 앱 문서 속성 설정
spread.docProps.appDocProps = {
    manager: 'John',
    company: 'XYZCompany',
    hyperlinkBase: 'https://example.com/documents/'
};

// 사용자 정의 문서 속성 설정
spread.docProps.customDocPropsManager.all([
    { name: 'Kim', value: '1' },
    { name: 'Smith', value: '2' }
]);

// 문서 속성 가져오기
console.log(spread.docProps.coreDocProps);
console.log(spread.docProps.appDocProps);
console.log(spread.docProps.customDocPropsManager.all());
```

문서의 사용자 정의 속성은 `IDocProps` 인터페이스의 `customDocPropsManager` 속성을 사용하여 변경할 수 있습니다.
아래의 코드 예제는 사용자 정의 속성 관리자를 통해 문서에 연결된 사용자 정의 속성을 추가, 삭제, 조회, 전체 목록 확인, 초기화하는 방법을 보여줍니다.

```javascript
 const customPropsManager = spread.docProps.customDocPropsManager;
 customPropsManager.all([
     { name: 'name1', value: 'value1' },
     { name: 'name2', value: 'value2' },
 ]);

 // 새로운 사용자 정의 문서 속성 설정
 customPropsManager.add('name3', 'value3');
 customPropsManager.add('name1', 'value1_modified');

 // 'name2' 사용자 정의 문서 속성 삭제 
 customPropsManager.remove('name2');

 // 'name3' 사용자 정의 문서 속성의 값 가져오기
 customPropsManager.get('name3'); // Output: 'value3'

 // 남아 있는 모든 사용자 정의 문서 속성 가져오기
 customPropsManager.all(); // Output: [ { name: 'name1', value: 'value1_modified' }, { name: 'name3', value: 'value3' } ]

 // 모든 사용자 정의 문서 속성 초기화
 customPropsManager.clear();
```

### 디자이너 사용하기

워크북 내에서 문서 속성을 관리하기 위해 아래 단계를 따르기 바랍니다.

#### 기본 속성 보기 또는 수정하기

1. **파일(File)** 탭을 클릭한 후 \*\*정보(Info)\*\*를 선택합니다.
2. **정보(Info)** 탭의 오른쪽에 워크북의 속성이 표시됩니다.
3. 필요한 정보를 추가하거나 수정합니다.
4. 텍스트 입력란 바깥을 클릭하면 변경 사항이 저장됩니다.
<br>
    ![Info tab.d994bd](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/d37fbce1-6a37-43ce-b728-dd79fba68421/Info%20tab.d994bd.54a4f2.png)

#### **고급 속성 편집하기**

1. **Info**. **파일(File)** 탭을 클릭한 후 \*\*정보(Info)\*\*를 선택합니다.
2. **속성(Properties)** 드롭다운을 클릭하고 **고급 속성(Advanced Properties)을 선택합니다**.
<br>
    ![Advance Document Properties.92e857](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/d37fbce1-6a37-43ce-b728-dd79fba68421/Advance%20Document%20Properties.92e857.d46c34.png)
<br>
3. **속성(Properties)** 대화 상자에는 요약(Summary), 통계(Statistics), 내용(Contents), 사용자 지정(Custom) 등의 다양한 탭이 있습니다.
    각 탭은 문서와 관련된 다양한 정보를 설정하는 데 사용됩니다.
<br>
    ![Properties dialog.bfefcc](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/d37fbce1-6a37-43ce-b728-dd79fba68421/Properties%20dialog.bfefcc.24575f.png)
    기본적으로 **요약(Summary)** 탭이 선택되어 있으며, 필요에 따라 문서 요약 정보를 추가하거나 변경할 수 있습니다.
    **통계(Statistics)** 및 **내용(Contents)** 탭에서는 문서에 대한 일반 정보를 확인할 수 있습니다.
<br>
4. 추가 사용자 정의 속성을 설정하려면 **사용자 지정(Custom)** 탭을 클릭합니다.
    1. **이름(Name)** 필드에 사용자 정의 속성의 이름을 입력하거나 목록에서 선택합니다.
    2. **형식(Type)** 드롭다운에서 데이터 유형을 선택합니다.
        사용 가능한 데이터 유형은 다음과 같습니다:
        1. 텍스트(Text)
        2. 날짜(Date)
        3. 숫자(Number)
        4. 예/아니오(Yes 또는 No)
    3. **값(Value)** 필드에 선택한 데이터 유형에 맞는 값을 입력합니다.
        선택한 **형식(Type)**에 맞는 값을 입력해야 합니다. 예를 들어 형식(Type)을 ‘숫자(Number)’로 선택했다면, 값(Value)에는 숫자를 입력해야 합니다.
        유형과 일치하지 않는 값은 자동으로 텍스트(Text)로 저장됩니다.
    4. **추가(Add)** 버튼을 클릭하면 사용자 정의 속성이 추가되며, 속성 목록(Properties list)에 표시됩니다.
<br>
        <br>
        ![Custom Properties tab.2588fa](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/d37fbce1-6a37-43ce-b728-dd79fba68421/Custom%20Properties%20tab.2588fa.c907e2.png)
<br>
        또한 SpreadJS는 문서 콘텐츠를 속성 값에 연결할 수 있는 **내용에 연결(Link to content)** 설정을 제공합니다. 이 기능을 사용하면 콘텐츠 값이 변경될 때 문서 속성도 자동으로 업데이트되어 변경된 값을 반영할 수 있습니다. 아래는 이 설정이 어떻게 작동하는지를 보여주는 예시입니다.
<br>
        **예시**: 판매 데이터 시트에 여러 테이블과 차트를 포함한 워크북이 있다고 가정해봅니다.
<br>
        1. **Sheet1**의 셀 **!B10**의 총 판매 금액이 변경될 때마다 자동으로 업데이트되는 `"Total Sales"`라는 문서 속성을 생성하려고 합니다.
        2. 먼저, **Sheet1!$B$10** 셀에 대해 [사용자 정의 이름(custom name)을 생성](/spreadjs/docs/v18/features/workbook/name-box)합니다.
            생성된 사용자 정의 이름은 **내용(Contents)** 탭과 **Named Ranges** 섹션에서도 확인할 수 있습니다.
        3. 그런 다음 **사용자 지정(Custom)** 탭으로 이동하여 **이름(Name)** 필드에 "Total Sales"를 입력하고 **내용에 연결(Link to content)** 체크박스를 선택합니다.
        4. **값(Value)**필드에는 앞서 만든 사용자 정의 이름이 표시됩니다.
        5. **추가(Add)** 버튼을 클릭하면 속성이 **속성** 목록(Properties list)에 추가되며, 링크 아이콘이 함께 표시되고 해당 셀(Sheet1!$B$10)의 값과 동일한 값을 갖게 됩니다.
<br>
            이제 Sheet1의 B10의 값이 변경될 때마다 "Total Sales" 문서 속성도 자동으로 업데이트됩니다.
            단, 사용자 지정 콘텐츠 링크 속성이 유효하지 않으면 속성 이름 앞에 연결 해제 아이콘이 나타나며, 해당 속성은 삭제만 가능합니다.
<br>
5. **확인(OK)** 버튼을 클릭하여 속성을 워크북에 저장합니다.

> **참고**:
>
> * SpreadJS에서 Excel 파일을 가져오거나 내보낼 때, docProps 속성은 항상 유지되어야 합니다.
> * 가져온 문서에 생성 시간이 있는 경우, 해당 문서의 기존 생성 시간이 그대로 사용됩니다. 그렇지 않은 경우 생성 시간은 없습니다.
> * 새 디자이너를 열 때는 기본적으로 생성 시간이 현재 시각으로 설정됩니다. 이후 새 워크북 추가 버튼을 클릭하면 생성 시간이 최신 시각으로 갱신됩니다.
> * 파일을 가져올 때 SpreadJS는 문서의 수정 시간(modified time)을 사용하고, 파일을 내보낼 때는 수정 시간이 내보낸 시각으로 업데이트됩니다.
> * 사용자가 인쇄(Print) 옵션을 클릭하면, 마지막 인쇄 시간이 현재 시각으로 변경됩니다.