使用Python保護(hù)和取消保護(hù)Excel工作表和工作簿的完整代碼

在企業(yè)數(shù)據(jù)管理和報(bào)表分發(fā)場(chǎng)景中,Excel 文件往往包含敏感信息或關(guān)鍵公式,需要防止未經(jīng)授權(quán)的修改。手動(dòng)為每個(gè)工作表設(shè)置保護(hù)密碼在文件數(shù)量較少時(shí)可行,但面對(duì)批量處理或自動(dòng)化生成報(bào)表的需求,這種方式顯然不夠高效。
通過(guò) Python 編程實(shí)現(xiàn) Excel 工作表和工作簿的保護(hù)與解保護(hù),可以將安全策略無(wú)縫集成到文檔生成和分發(fā)流程中。本文將介紹如何使用 Python 對(duì)工作表進(jìn)行密碼保護(hù)、鎖定特定單元格和行列、設(shè)置可編輯區(qū)域、隱藏公式,以及解除保護(hù)。
環(huán)境準(zhǔn)備
本文使用 Spire.XLS for Python 庫(kù)操作 Excel 文件,通過(guò) pip 安裝:
pip install Spire.XLS
在腳本中導(dǎo)入所需模塊:
from spire.xls import * from spire.xls.common import *
保護(hù)工作表的基礎(chǔ)概念
Excel 的保護(hù)機(jī)制分為兩個(gè)層級(jí):
- 工作表保護(hù):限制對(duì)工作表中單元格內(nèi)容的編輯,可以設(shè)置密碼,也可以選擇性地允許某些操作(如排序、篩選等)。
- 工作簿保護(hù):限制對(duì)工作簿結(jié)構(gòu)的修改,防止用戶添加、刪除或重命名工作表。
在 Spire.XLS 中,工作表保護(hù)通過(guò) Protect() 方法實(shí)現(xiàn),工作簿保護(hù)則通過(guò) Workbook.Protect() 方法實(shí)現(xiàn)。每個(gè)單元格都有一個(gè) Locked 屬性,默認(rèn)情況下所有單元格都是鎖定狀態(tài),但只有在啟用工作表保護(hù)后,鎖定才會(huì)生效。
保護(hù)工作表
最簡(jiǎn)單的保護(hù)方式是為整個(gè)工作表設(shè)置密碼。啟用保護(hù)后,所有單元格默認(rèn)處于鎖定狀態(tài),用戶無(wú)法編輯任何內(nèi)容:
from spire.xls import *
from spire.xls.common import *
# 創(chuàng)建工作簿并加載文件
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")
# 獲取第一個(gè)工作表
sheet = workbook.Worksheets[0]
# 使用密碼保護(hù)工作表
sheet.Protect("MyPassword", SheetProtectionType.All)
# 保存文檔
workbook.SaveToFile("ProtectSheet.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
SheetProtectionType.All 表示禁止所有操作。也可以根據(jù)需要選擇更細(xì)粒度的保護(hù)類型,如僅禁止插入行、刪除列等特定操作。
鎖定特定單元格
在多數(shù)場(chǎng)景中,并不需要鎖定所有內(nèi)容,而是只保護(hù)關(guān)鍵的公式單元格或匯總數(shù)據(jù)。實(shí)現(xiàn)這一目標(biāo)的關(guān)鍵在于:先將所有單元格設(shè)為未鎖定,再將需要保護(hù)的單元格設(shè)為鎖定,最后啟用工作表保護(hù)。
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")
sheet = workbook.Worksheets[0]
# 將 B3 單元格設(shè)為鎖定
sheet.Range["B3"].Style.Locked = True
# 將 C3 單元格設(shè)為未鎖定(即使工作表受保護(hù)也可編輯)
sheet.Range["C3"].Style.Locked = False
# 啟用工作表保護(hù)
sheet.Protect("TestPassword", SheetProtectionType.All)
workbook.SaveToFile("LockSpecificCells.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
這種方式適用于表單類文檔——大部分字段允許用戶填寫(xiě),只有公式和標(biāo)題等關(guān)鍵區(qū)域需要保護(hù)。
鎖定特定行或列
當(dāng)需要保護(hù)整行或整列數(shù)據(jù)時(shí),可以通過(guò)遍歷設(shè)置行或列的鎖定狀態(tài)。以下示例先解鎖所有行,然后僅鎖定第 3 行:
workbook = Workbook()
workbook.CreateEmptySheet()
sheet = workbook.Worksheets[0]
# 解鎖所有行
for i in range(0, 255):
sheet.Rows[i].Style.Locked = False
# 鎖定第 3 行
sheet.Rows[2].Text = "Locked"
sheet.Rows[2].Style.Locked = True
# 啟用保護(hù)
sheet.Protect("123", SheetProtectionType.All)
workbook.SaveToFile("LockSpecificRow.xlsx", ExcelVersion.Version2013)
鎖定特定列的方式類似,以下示例鎖定第 4 列(D 列):
workbook = Workbook()
workbook.CreateEmptySheet()
sheet = workbook.Worksheets[0]
# 解鎖所有行
for i in range(0, 255):
sheet.Rows[i].Style.Locked = False
# 鎖定第 4 列
sheet.Columns[3].Text = "Locked"
sheet.Columns[3].Style.Locked = True
# 啟用保護(hù)
sheet.Protect("123", SheetProtectionType.All)
workbook.SaveToFile("LockSpecificColumn.xlsx", ExcelVersion.Version2013)
設(shè)置可編輯區(qū)域
另一種更靈活的方式是在保護(hù)工作表的同時(shí),指定某些區(qū)域?yàn)?quot;允許編輯范圍"。用戶可以在這些區(qū)域內(nèi)自由編輯,而工作表其他部分仍然受保護(hù):
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")
sheet = workbook.Worksheets[0]
# 定義允許編輯的區(qū)域
sheet.AddAllowEditRange("EditableRanges", sheet.Range["B4:E12"])
# 保護(hù)工作表
sheet.Protect("TestPassword", SheetProtectionType.All)
workbook.SaveToFile("ProtectedWithEditableRange.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
AddAllowEditRange() 方法接受兩個(gè)參數(shù):區(qū)域名稱和區(qū)域范圍。這種方式比逐個(gè)設(shè)置單元格的 Locked 屬性更加直觀,特別適合需要在受保護(hù)表格中開(kāi)放數(shù)據(jù)錄入?yún)^(qū)域的場(chǎng)景。
保護(hù)工作簿結(jié)構(gòu)
除了工作表級(jí)別的保護(hù),還可以對(duì)工作簿整體結(jié)構(gòu)進(jìn)行保護(hù),防止用戶添加、刪除或重命名工作表:
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")
# 保護(hù)工作簿結(jié)構(gòu)
workbook.Protect("e-iceblue")
workbook.SaveToFile("ProtectWorkbook.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
工作簿保護(hù)與工作表保護(hù)可以同時(shí)使用,實(shí)現(xiàn)從整體結(jié)構(gòu)到單元格內(nèi)容的多層防護(hù)。
隱藏公式
在包含復(fù)雜計(jì)算公式的報(bào)表中,有時(shí)需要讓用戶看到計(jì)算結(jié)果但不能查看或修改公式本身。通過(guò)設(shè)置 IsFormulaHidden 屬性并啟用保護(hù),可以隱藏工作表中的所有公式:
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")
sheet = workbook.Worksheets[0]
# 隱藏已使用區(qū)域中的所有公式
sheet.AllocatedRange.IsFormulaHidden = True
# 啟用工作表保護(hù)以使隱藏生效
sheet.Protect("e-iceblue")
workbook.SaveToFile("HideFormulas.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
需要注意的是,IsFormulaHidden 屬性只有在啟用工作表保護(hù)后才會(huì)生效。單獨(dú)設(shè)置該屬性不會(huì)隱藏公式。
解除工作表保護(hù)
解除保護(hù)需要提供正確的密碼。使用 Unprotect() 方法并傳入設(shè)置保護(hù)時(shí)使用的密碼即可:
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile("ProtectedSheet.xlsx")
sheet = workbook.Worksheets[0]
# 使用密碼解除保護(hù)
sheet.Unprotect("e-iceblue")
workbook.SaveToFile("UnprotectedSheet.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
如果工作表沒(méi)有設(shè)置密碼保護(hù),可以直接調(diào)用 Unprotect() 方法無(wú)需傳入?yún)?shù)。
實(shí)用技巧
保護(hù)與可編輯區(qū)域的組合策略:在構(gòu)建數(shù)據(jù)錄入模板時(shí),可以先用 AddAllowEditRange() 開(kāi)放輸入?yún)^(qū)域,再保護(hù)工作表。這樣既能防止用戶意外修改表頭和公式,又不影響正常的業(yè)務(wù)數(shù)據(jù)錄入。
批量保護(hù)多個(gè)工作表:遍歷工作簿中的所有工作表并統(tǒng)一設(shè)置保護(hù)密碼:
for i in range(workbook.Worksheets.Count):
sheet = workbook.Worksheets[i]
sheet.Protect("CommonPassword", SheetProtectionType.All)
密碼安全建議:在生產(chǎn)環(huán)境中,密碼不應(yīng)硬編碼在源代碼中。建議使用環(huán)境變量或配置文件管理密碼,并選擇足夠強(qiáng)度的密碼以防止暴力 破解。
總結(jié)
本文介紹了使用 Python 對(duì) Excel 工作表和工作簿進(jìn)行保護(hù)的完整方法,包括基礎(chǔ)保護(hù)、鎖定特定單元格和行列、設(shè)置可編輯區(qū)域、隱藏公式以及解除保護(hù)等操作。這些功能在自動(dòng)化報(bào)表生成、批量文件處理和文檔安全管理等場(chǎng)景中具有廣泛的實(shí)用價(jià)值。
結(jié)合條件格式、數(shù)據(jù)驗(yàn)證等功能,可以構(gòu)建出安全性更高、功能更完善的 Excel 自動(dòng)化處理方案。
到此這篇關(guān)于使用Python保護(hù)和取消保護(hù)Excel工作表和工作簿的完整代碼的文章就介紹到這了,更多相關(guān)Python保護(hù)和取消保護(hù)Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用Python實(shí)現(xiàn)對(duì)Excel文件加密與保護(hù)
- 使用Python保護(hù)或加密Excel文件的7種方法
- Python批量處理Excel工作簿和工作表的完整代碼
- Python批量提取Excel工作簿中所有工作表的唯一值
- Python批量重命名Excel工作表的示例詳解
- Python批量合并多個(gè)Excel工作簿中同名工作表
- Python自動(dòng)化拆分Excel工作表的實(shí)戰(zhàn)教學(xué)
- Python自動(dòng)化批量排序Excel所有工作表的完整指南
- Python自動(dòng)化篩選Excel工作簿中多個(gè)工作表的實(shí)戰(zhàn)教學(xué)
相關(guān)文章
在Flask使用TensorFlow的幾個(gè)常見(jiàn)錯(cuò)誤及解決
這篇文章主要介紹了在Flask使用TensorFlow的幾個(gè)常見(jiàn)錯(cuò)誤及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
python+numpy實(shí)現(xiàn)的基本矩陣操作示例
這篇文章主要介紹了python+numpy實(shí)現(xiàn)的基本矩陣操作,結(jié)合實(shí)例形式分析了Python使用numpy模塊針對(duì)矩陣進(jìn)行創(chuàng)建、增刪查改、索引、運(yùn)算相關(guān)操作實(shí)現(xiàn)技巧,注釋中包含有詳細(xì)的說(shuō)明,需要的朋友可以參考下2019-07-07
Python垃圾回收機(jī)制三種實(shí)現(xiàn)方法
這篇文章主要介紹了Python垃圾回收機(jī)制三種實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
10張動(dòng)圖學(xué)會(huì)python循環(huán)與遞歸問(wèn)題
今天為大家整理了十張動(dòng)圖GIFS,有助于認(rèn)識(shí)循環(huán)、遞歸、二分檢索等概念的具體運(yùn)行情況。代碼實(shí)例以Python語(yǔ)言編寫(xiě),非常不錯(cuò),感興趣的朋友跟隨小編一起學(xué)習(xí)吧2021-02-02
關(guān)于windos10環(huán)境下編譯python3版pjsua庫(kù)的問(wèn)題
pjsua默認(rèn)綁定的python版本是python 2.4,使用起來(lái)有諸多限制,希望可以使用python3調(diào)用pjsua的庫(kù)實(shí)現(xiàn)軟電話的基礎(chǔ)功能。這篇文章主要介紹了windos10環(huán)境下編譯python3版pjsua庫(kù),需要的朋友可以參考下2021-10-10
基于Python中capitalize()與title()的區(qū)別詳解
下面小編就為大家分享一篇基于Python中capitalize()與title()的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12

