公式隐藏

您可以通过调整单元格的“hidden”属性来管理受保护工作表中公式的可见性。这对于防止公式泄露和保护隐私非常有效。

有时您可能希望隐藏公式,不向外部方显示它们,就像上面的绩效评估表单中,薪资增长结果和年终奖金计算是相对私密的数据,我们不希望其他人看到具体的计算公式。要做到这一点,可以使用hidden属性,例如: 当隐藏属性生效时,以下功能将受到影响: 当隐藏的单元格处于编辑模式时,输入编辑器中的默认数据将为空。 当将隐藏的单元格复制到其他单元格时,只会复制结果,而不是公式。 表选项'showFormulas'无法显示已生效的隐藏单元格的公式。 当隐藏的单元格是活动单元格时,公式栏将不显示任何数据。 公式编辑器面板无法显示已生效的隐藏单元格的公式。 请注意,如果工作表未受保护,则'hidden'属性将不会生效。 如果您希望彻底防止他人了解和篡改您的公式,可以同时使用'hidden'和'locked'。这样,在工作表受保护后,该单元格既无法查看公式,也无法修改公式。例如:
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="zh-cn" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-resources-zh/dist/gc.spread.sheets.resources.zh.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; }