수식 숨김

셀의 '숨김' 속성을 조정하여 보호된 워크시트에서 수식의 공개 여부를 관리할 수 있습니다. 이렇게 하면 효과적으로 수식 유출을 방지하고 개인정보를 보호할 수 있습니다.

위의 성과 평가 시트 수식처럼 외부인에게 보이지 않도록 수식을 숨기고 싶을 때가 있습니다. 급여 인상 결과 및 연말 보너스 계산은 비교적 개인적인 데이터이므로 다른 사람에게 구체적인 계산 수식이 보이지 않도록 설정하고 싶을 수 있습니다. 그러려면 숨김을 사용합니다. 예를 들어, 숨김 속성이 적용되면 다음과 같은 기능이 영향을 받습니다. 숨김 셀이 편집 모드일 경우 입력 편집기의 기본 데이터는 비어 있습니다. 숨김 셀을 다른 셀로 복사할 경우 수식이 아닌 결과만 복사됩니다. 시트 옵션 'showFormulas'는 '숨김'이 적용된 셀의 수식을 표시할 수 없습니다. 숨김 셀이 활성 셀인 경우 수식 입력줄에 데이터가 표시되지 않습니다. 수식 편집기 패널은 적용된 숨김 셀의 수식을 표시할 수 없습니다. 워크시트가 보호되지 않은 경우 '숨김' 속성이 적용되지 않는다는 점에 유의하십시오. 다른 사람이 수식을 확인하고 변조하는 것을 철저히 막으려면 '숨김'과 '잠금'을 함께 사용할 수 있습니다. 이렇게 하면, 워크시트가 보호된 후에 해당 셀에서 수식을 보거나 수정할 수 없습니다. 예:
const alreadyProtect = 'The worksheet is already protected!'; const unprotectImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB0UlEQVR4nO2YzU7CQBDHNyae9A30qF6NNlFv7QzhqheukN1An4Mbnv14A70YwgERX0XiWRNBKl8eMDGuGWy0LopoS0tl/8kkZLMT/r+dmW1axrS0tAKTYRjziJgCgFNEvAKAR0Tsub9pLUV72DTKsqw9ALhGRDkqaA/tZdOifD4/h4j7PxlX4gURC5QbtX/2B/PeKERqnlrBPU1vi/QR8dCyrO1kMrlAYZrmDgAcAcCTWgkA2I3EPA2j2vMAcAMA69/lJBKJDQC4VWfCiGKw6UZRT36UeU/e5heVSLGw5V6LXhMHv8g9VuBPWNhCxJoCsDVuLs2EkltjYct9QL2bME1zcdxc2qsA9FjYUq/EsPN9SwOgrsD4yuVyy5zzIue8K4SQkwz+9h8lzvlqkOadSRsXwyBOJpNZ8g1AJx+2efEBcRYEQDdCgLZvgKjMCzc0gNAVELqFfGkmW8i2bXl5cS7bTkO2mnVZrZQHa7EBqFbKUj73PwWtxQag7TSGAGgtNgCtZn0I4OH+Lj4A1bi3kG3bA8NUiVgOsQgwmAYQugJSt9Cst1An7q+UpQgBir4B0un0mhCiGYF5J5vNrrAgRN9n6BNHSO3UoZMPzLyW1j/XK1zJDTLJ864hAAAAAElFTkSuQmCC'; const protectImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB10lEQVR4nO2Yz0rDQBDGB0Ev+gZ6VK+iAfWWzJRe9dL3qfVQlWwR/7yBXqT0JepD2Nar0h4s2ERq3YArW4LGrdZq0qSx+8FACDvw/XZmNmQBtLS0IpNhGLNElEPESyK6QcQnInL9Z/kuJ9fAJMqyrF1EbBCRGBZyjVwLk6J8Pj9DRAc/GVfilYiKMjdp//AH88EoJmpetoK/m8EW6RHRqWVZW9lsdl6GaZrbiHiGiC9qJRBxJxHzchjVnkfEO0Rc+y4nk8msI+K9OhNGEoMtTxR154eZD+RtfFGJHMQt/1gMmjj5Re65An8BcYuIagrA5qi5ciaU3BrELf8D9W7CNM2FUXPlWgXAhbilHolx54eWBiBdgdElDmGJMyhzBo7HQIwzOAOHM6j0jmAlOvM2tMdt3FNBbGiLEiyGBpA7H7d576MaV1EAOAkCPIYGSMq854cG8HQFQLdQKE1nCx3Pie71vnBbDeE266JbLfTfpQagWy0Ix3E+RR8iLQBuqzEA4LZuUwTQrA8CNGtpb6G9lA1xtdCvRCqH2IswQAMwXQGhW2iqW4jb0En1LyVnUEkQoBwaoMdglTN4iN28De3nEixDFJL3M/KKI4524jZ05M5HZl5L65/rDc6nQtkkwmMVAAAAAElFTkSuQmCC'; window.onload = function() { var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss")); spread.suspendPaint(); spread.fromJSON(performanceEvaluationSheet); initSheet1(spread); bindEvent(spread); spread.resumePaint(); }; function initSheet1(spread) { var sheet = spread.getActiveSheet(); sheet.getCell(13, 1).hidden(true); sheet.getCell(13, 1).locked(false); sheet.getCell(14, 1).hidden(true); sheet.getCell(14, 1).locked(false); sheet.getCell(14, 5).hidden(true); sheet.getCell(14, 5).locked(false); sheet.options.isProtected = true; updateLabels(sheet, sheet.getCell(13, 1)) }; function updateLabels(sheet, activeCell) { _getElementById("Locked").checked = activeCell.locked(); _getElementById("Hidden").checked = activeCell.hidden(); var formula = activeCell.formula(); if (formula) { _getElementById("Formula").value = "=" + formula; } else { _getElementById("Formula").value = "no formula is set"; } } function bindEvent(spread) { spread.bind(GC.Spread.Sheets.Events.SelectionChanged, function(e, info) { var sheetTmp = info.sheet; var row = sheetTmp.getActiveRowIndex(); var col = sheetTmp.getActiveColumnIndex(); _getElementById("commentTip").innerHTML = "[ " + row + " : " + col + " ]"; activeCell = sheetTmp.getCell(row, col); updateLabels(sheetTmp, activeCell); }); _getElementById("setProperty").addEventListener('click', function() { var sheet = spread.getActiveSheet(); var row = sheet.getActiveRowIndex(); var col = sheet.getActiveColumnIndex(); activeCell = sheet.getCell(row, col); if (activeCell) { activeCell.locked(_getElementById("Locked").checked); activeCell.hidden(_getElementById("Hidden").checked); } }) _getElementById("ShowFormula").addEventListener("click", () => { var sheet = spread.getActiveSheet(); let showFormulas = sheet.options.showFormulas; sheet.options.showFormulas = !showFormulas; }) const protectStatus = _getElementById('protectStatus'); let currentProtect = spread.getActiveSheet().options.isProtected protectStatus.src = currentProtect ? protectImg : unprotectImg; let protectBtn = _getElementById('protectBtn'), unprotectBtn = _getElementById('unprotectBtn'); protectBtn.disabled = currentProtect; unprotectBtn.disabled = !currentProtect; protectBtn.addEventListener('click', function() { sheet = spread.getActiveSheet(); if (sheet.options.isProtected) { alert(alreadyProtect); return; } sheet.protect(); protectStatus.src = protectImg; protectBtn.disabled = true; unprotectBtn.disabled = false; }); unprotectBtn.addEventListener('click', function() { sheet = spread.getActiveSheet(); protectStatus.src = sheet.options.isProtected ? protectImg : unprotectImg; sheet.unprotect(); protectStatus.src = unprotectImg; protectBtn.disabled = false; unprotectBtn.disabled = true; }) } function _getElementById(id) { return document.getElementById(id); }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="spreadjs culture" content="ko-kr" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets-resources-ko/dist/gc.spread.sheets.resources.ko.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/data/performanceEvaluationSheet.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" class="sample-spreadsheets"></div> <div class="options-container"> <div class="option-row"> <input type="button" value="Protect" id="protectBtn" style="width:100px;" /> <input type="button" value="Unprotect" id="unprotectBtn" style="width:100px;" /> <img id="protectStatus" style="height: 25px" /> </div> <div class="cellFormatSetting"> <div class="option-row"> <h4>Current cell is : <span id="commentTip"></span> </h4> </div> <div class="option-row"> <div class="option"> <label>Actual Formula</label> <input id="Formula" disabled /> </div> </div> <div class="option-row"> <div class="checkbox"> <input id="Locked" type="checkbox" checked /> <label for="Locked">Locked</label> </div> <div class="checkbox"> <input id="Hidden" type="checkbox" checked /> <label for="Hidden">Hidden</label> </div> </div> <div class="option-row"> <input type="button" id="setProperty" value="Apply" /> </div> </div> <div class="option-row"> <input id="ShowFormula" type="button" value="Show Formula" /> </div> </div> </div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: calc(100% - 280px); height: 100%; overflow: hidden; float: left; } .options-container { float: right; width: 280px; overflow: auto; padding: 12px; height: 100%; box-sizing: border-box; background: #fbfbfb; } .sample-options{ z-index: 1000; } .option { padding-bottom: 6px; } .checkbox { padding-right: 12px; display: inline-block; } label { display: inline-block; min-width: 100px; } input, select { width: 100%; padding: 4px 0; margin-top: 4px; box-sizing: border-box; } input[type=checkbox] { width: auto; padding: 0; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } .cellFormatSetting { margin: 20px auto; padding: 10px; border: 2px solid #C0C0C0; } #protectStatus { margin-bottom: -5px; }