[]
SpreadJS를 사용하면 워크시트를 보호하여 모든 셀을 잠그고 다른 사용자가 데이터를 변경, 이동 또는 삭제하지 못하도록 할 수 있습니다. 그러나 잠긴 셀의 데이터는 여전히 복사할 수 있습니다.
isProtected 옵션을 true로 설정하여 워크시트를 보호할 수 있으며, locked 메서드를 사용하여 셀을 잠그거나 잠금 해제할 수 있습니다.
locked 메서드를 false로 설정하면 보호된 워크시트에서 특정 셀을 사용자가 편집할 수 있도록 허용할 수 있습니다.
sheet.getCell(1,1, GC.Spread.Sheets.SheetArea.viewport).locked(false);
sheet.setValue(1,1,"unLocked");
sheet.getRange(-1,3, -1, 1).locked(false);
sheet.getRange(5, -1, 1, -1).locked(false);
sheet.options.isProtected = true;
다음 단계에 따라 보호된 워크시트에서 특정 셀 범위만 잠글 수 있습니다:
사용자 지정 스타일을 생성하여 locked 메서드를 false로 설정하여 모든 셀의 잠금을 해제합니다.
읽기 전용으로 설정할 특정 셀 범위만 따로 잠금 처리합니다.
// 워크북 및 워크시트 구성
var spread = new GC.Spread.Sheets.Workbook("ss");
var sheet = spread.getActiveSheet();
// 스타일을 통해 워크시트의 모든 셀 잠금 해제
let style = new GC.Spread.Sheets.Style();
style.locked = false;
// 시트의 모든 셀에 대해 스타일을 기본 스타일로 설정
sheet.setDefaultStyle(style);
// 읽기 전용으로 설정할 셀 범위를 별도로 잠금
new GC.Spread.Sheets.CellRange(sheet, 0, 0, 13, 4).locked(true);
// 시트 보호 설정
sheet.options.isProtected = true;
options.protectionOptions 속성은 변경 가능한 영역을 지정하는 데 사용할 수 있습니다. 이 영역에는 행이나 열의 크기 조정, 드래그, 삽입 또는 삭제 등이 포함될 수 있습니다.
isProtected 옵션이 true로 설정되면 다음 속성들이 적용됩니다:
속성 | 설명 |
---|---|
| 행 삽입 시 드래그 작업을 허용합니다. |
| 열 삽입 시 드래그 작업을 허용합니다. |
| 행 삽입을 허용합니다. |
| 열 삽입을 허용합니다. |
| 행 삭제를 허용합니다. |
| 열 삭제를 허용합니다. |
| 잠긴 셀 선택을 허용합니다. |
| 잠금 해제된 셀 선택을 허용합니다. |
| 범위 정렬을 허용합니다. |
| 범위 필터링을 허용합니다. |
| 플로팅 오브젝트(도형 등)의 편집을 허용합니다. |
| 행 크기 조정을 허용합니다. |
| 열 크기 조정을 허용합니다. |
| 행 그룹 확장/축소를 허용합니다. |
| 열 그룹 확장/축소를 허용합니다. |
isProtected 옵션이 false로 설정되면 위의 보호 옵션들은 적용되지 않습니다.
워크시트를 보호하면서 SpreadJS에서 제공하는 다양한 보호 옵션들을 활성화할 수 있습니다.
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
sheet.options.isProtected = true;
sheet.options.protectionOptions.allowDeleteRows = true;
sheet.options.protectionOptions.allowDeleteColumns = true;
sheet.options.protectionOptions.allowInsertRows = true;
sheet.options.protectionOptions.allowInsertColumns = true;
sheet.options.protectionOptions.allowDragInsertRows = true;
sheet.options.protectionOptions.allowDragInsertColumns = true;
sheet.options.protectionOptions.allowOutlineColumns = true;
참고: allowInsertRows, allowInsertColumns, allowDeleteRows, allowDeleteColumns 보호 옵션은 사용자 인터페이스에서 작업을 수행할 때만 적용됩니다. 다시 말해, 이 값들은 컨텍스트 메뉴에서의 행/열 삽입 및 삭제 명령을 제한하는 데만 영향을 미칩니다.
기본적으로 보호된 워크시트에서는 개요 행 또는 열 그룹을 확장하거나 축소할 수 없습니다. 이때 invalidOperation 이벤트가 발생하며, 다음과 같이 해당 이벤트에 바인딩하여 경고 메시지를 표시할 수 있습니다:
// 경고 메세지 설정
spread.bind(GC.Spread.Sheets.Events.InvalidOperation, (e, args) => {
if(args.invalidType === GC.Spread.Sheets.InvalidOperationType.groupProtected){
args.message="Expand or Collapse operation is not allowed for a protected worksheet.";
alert(args.message)
}
});
protect 메서드를 사용할 때 워크시트를 보호하면서 암호를 설정할 수 있습니다. 이 메서드를 호출하면 isProtected 옵션은 자동으로 true로 설정됩니다.
//워크시트 보호
var password = 'AddedPassword';
activeSheet.protect(password);
이후, unprotect 메서드에 암호를 인자로 전달하여 워크시트 보호를 해제할 수 있습니다.
// 암호를 사용하여 워크시트의 보호를 해제
if(activeSheet.hasPassword()) {
activeSheet.unprotect(password);
} else {
activeSheet.unprotect();
}
보호된 시트에서 수식 셀의 표시 여부를 제어하려면 Style 클래스의 hidden 속성이나 CellRange클래스의 hidden 메서드를 사용할 수 있습니다.
기본적으로 hidden 속성은 false로 설정되어 있어 수식이 숨겨지지 않습니다. 또한 이 속성은 SSJSON, SJS, XLSX 형식의 내보내기 및 가져오기를 지원합니다.
hidden 속성은 예를 들어 KPI 데이터 생성, 연말 보너스 계산 등과 같이 직원의 자기 평가 및 상사 평가에 기반하여 계산이 이뤄지는 경우, 관련 수식을 숨기고 평가 시스템을 보호하고자 할 때 유용하게 사용됩니다.
다음은 GC.Spread.Sheets.Style 타입의 hidden 속성을 사용해 셀의 수식을 숨기는 코드 예시입니다:
// 시트가 보호될 때 셀의 수식이 표시되는지 여부를 설정
activeSheet.options.isProtected = true;
// hidden 속성이 true인 스타일 생성
var style = new GC.Spread.Sheets.Style();
style.hidden = true;
activeSheet.setStyle(1, 1, style, GC.Spread.Sheets.SheetArea.viewport);
// 수식이 포함된 셀에 스타일 적용
activeSheet.setFormula(1, 1, "=SUM(1,2)");
또는, 아래의 코드 예시는 GC.Spread.Sheets.CellRange 타입의 hidden 메서드를 사용하는 방식입니다:
// 시트가 보호될 때 셀의 수식이 표시되는지 여부를 설정
activeSheet.options.isProtected = true;
activeSheet.setFormula(1, 3, "=SUM(10,20)");
activeSheet.getRange(1, 3, GC.Spread.Sheets.SheetArea.viewport).hidden(true);
보호된 워크시트에서 숨겨진 속성에 의해 영향을 받는 SpreadJS 기능들:
셀에 hidden 속성이 설정되어 있을 경우, **수식 입력줄(Formula bar)**과 **수식 편집기 패널(Formula Editor panel)**은 어떤 수식도 표시하지 않습니다.
편집 모드에서 hidden 셀이 선택되면, **입력 에디터(Input Editor)**의 기본 데이터는 비어 있습니다.
숨겨진 셀은 수식을 복사하지 않고 결과만 복사되지만, 잘라내기(Cut) 작업은 항상 수식을 포함합니다.
그러나 locked 속성을 true로 설정하여 이를 방지할 수 있습니다.
showFormulas 속성은 숨겨진 셀의 수식을 표시하지 않습니다.
FORMULATEXT() 함수는 hidden 속성이 적용된 셀의 수식을 가져올 수 없습니다.
참고: hidden과 locked 속성은 아래 표와 같이 서로의 기능에 영향을 줍니다:
상황 | locked | hidden | 결과 |
---|---|---|---|
시트가 보호되지 않음 | True/False | True/False | locked와 hidden 모두 적용되지 않음 |
시트가 보호됨 | False | False | 셀은 편집 가능하며 수식은 정상적으로 표시됨 |
True | False | 셀은 잠겨 있어 편집 불가, 수식은 정상적으로 표시됨 | |
False | True | 셀은 편집 가능, 수식은 숨겨짐 편집 모드에서 입력 박스는 기본값으로 null 표시 | |
True | True | 셀은 잠겨 있고 편집 불가, 수식은 숨겨짐 |
제한사항
테이블 시트, 간트 시트, 리포트 시트는 hidden 속성을 지원하지 않습니다.
API를 통해 접근한 수식에는 hidden 속성이 영향을 주지 않습니다.
시트 보호(Protect Sheet) 대화상자에 접근하려면, 시트 이름이 표시된 탭 스트립에서 마우스 오른쪽 버튼을 클릭한 후, 시트 보호(Protect Sheet) 옵션을 선택합니다.
시트 보호(Protect Sheet) 대화상자를 사용하여 워크시트를 보호 및 보호 해제하는 단계
워크시트를 보호하려면 암호를 입력하고, 시트 보호(Protect Sheet) 대화상자에서 제공된 여러 옵션을 선택하거나 선택 해제합니다.
워크시트 보호를 위한 암호를 입력하면, 암호 확인을 위한 또 다른 대화상자가 표시됩니다.
암호 설정이 성공적으로 완료되면 보호된 워크시트에 접근할 수는 있지만, 시트에 대한 어떤 변경도 수행할 수 없습니다.
워크시트를 보호 해제하려면 시트 보호 해제(Unprotect Sheet) 대화상자를 통해 설정한 암호를 입력하면 됩니다.