[]
        
(Showing Draft Content)

워크시트 보호 및 셀 잠금

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;

보호된 워크시트에서 셀 범위 잠그기

다음 단계에 따라 보호된 워크시트에서 특정 셀 범위만 잠글 수 있습니다:

  1. 사용자 지정 스타일을 생성하여 locked 메서드를 false로 설정하여 모든 셀의 잠금을 해제합니다.

  2. 읽기 전용으로 설정할 특정 셀 범위만 따로 잠금 처리합니다.

// 워크북 및 워크시트 구성
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로 설정되면 다음 속성들이 적용됩니다:

속성

설명

allowDragInsertRows

행 삽입 시 드래그 작업을 허용합니다.

allowDragInsertColumns

열 삽입 시 드래그 작업을 허용합니다.

allowInsertRows

행 삽입을 허용합니다.

allowInsertColumns

열 삽입을 허용합니다.

allowDeleteRows

행 삭제를 허용합니다.

allowDeleteColumns

열 삭제를 허용합니다.

allowSelectLockedCells

잠긴 셀 선택을 허용합니다.

allowSelectUnlockedCells

잠금 해제된 셀 선택을 허용합니다.

allowSort

범위 정렬을 허용합니다.

allowFilter

범위 필터링을 허용합니다.

allowEditObjects

플로팅 오브젝트(도형 등)의 편집을 허용합니다.

allowResizeRows

행 크기 조정을 허용합니다.

allowResizeColumns

열 크기 조정을 허용합니다.

allowOutlineRows

행 그룹 확장/축소를 허용합니다.

allowOutlineColumns

열 그룹 확장/축소를 허용합니다.

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 속성이 적용된 셀의 수식을 가져올 수 없습니다.

참고: hiddenlocked 속성은 아래 표와 같이 서로의 기능에 영향을 줍니다:

상황

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) 대화상자를 사용하여 워크시트를 보호 및 보호 해제하는 단계

  1. 워크시트를 보호하려면 암호를 입력하고, 시트 보호(Protect Sheet) 대화상자에서 제공된 여러 옵션을 선택하거나 선택 해제합니다.


    protect-sheet-dialog


  2. 워크시트 보호를 위한 암호를 입력하면, 암호 확인을 위한 또 다른 대화상자가 표시됩니다.


    confirm-protect

암호 설정이 성공적으로 완료되면 보호된 워크시트에 접근할 수는 있지만, 시트에 대한 어떤 변경도 수행할 수 없습니다.

워크시트를 보호 해제하려면 시트 보호 해제(Unprotect Sheet) 대화상자를 통해 설정한 암호를 입력하면 됩니다.

unprotect-sheet