
影刀RPA Excel工作簿保护加密与区域锁定作者林焱什么情况用什么生成的报表发出去后不希望别人修改公式、不想让某些列被编辑、需要给整个文件加密码防止未授权查看。在影刀RPA自动化流程中可以通过openpyxl设置工作表保护、单元格锁定以及用win32com设置文件级加密密码。适用场景报表防篡改、模板保护公式不被覆盖、敏感数据加密、多部门协作时限制编辑区域。怎么做工作表保护importopenpyxlfromopenpyxl.worksheet.protectionimportSheetProtection wbopenpyxl.load_workbook(rC:\Reports\report.xlsx)wswb.active# 默认所有单元格都是锁定状态开启保护后整个表不可编辑ws.protection.sheetTruews.protection.passwordmypassword123# 允许部分操作不锁死所有功能[video(video-uecXQBr4-1783501007503)(type-csdn)(url-https://live.csdn.net/v/embed/525010)(image-https://v-blog.csdnimg.cn/asset/f4faa587144cb7070f19e8b36813806b/cover/Cover0.jpg)(title-店群矩阵自动化突破运营极限)]ws.protection.formatCellsFalse# 允许设置单元格格式ws.protection.formatColumnsFalse# 允许调整列宽ws.protection.formatRowsFalse# 允许调整行高ws.protection.sortFalse# 允许排序ws.protection.autoFilterFalse# 允许自动筛选ws.protection.selectLockedCellsFalse# 允许选中锁定单元格ws.protection.selectUnlockedCellsFalse# 允许选中未锁定单元格wb.save(rC:\Reports\report_protected.xlsx)区域锁定只保护部分单元格fromopenpyxl.stylesimportProtection wbopenpyxl.load_workbook(rC:\Reports\report.xlsx)wswb.active# 默认所有单元格都是锁定的# 先把整个工作表的单元格设为不锁定forrowinws.iter_rows():forcellinrow:cell.protectionProtection(lockedFalse)# 再把需要保护的区域如公式列设为锁定forrowinrange(2,ws.max_row1):# 假设D列是公式列需要保护ws.cell(rowrow,column4).protectionProtection(lockedTrue)# E列也是公式ws.cell(rowrow,column5).protectionProtection(lockedTrue)# 开启工作表保护ws.protection.sheetTruews.protection.passwordformulaprotectwb.save(rC:\Reports\report_partial_protect.xlsx)允许编辑特定区域# 更精细的方案用允许用户编辑区域# openpyxl不支持直接设置允许用户编辑区域但可以通过锁定/不锁定实现wbopenpyxl.load_workbook(rC:\Reports\report.xlsx)wswb.active# 标题行和公式列锁定数据区域可编辑forrowinrange(1,ws.max_row1):forcolinrange(1,ws.max_column1):cellws.cell(rowrow,columncol)ifrow1:# 标题行锁定cell.protectionProtection(lockedTrue)elifcolin[4,5,6]:# D/E/F列是公式锁定cell.protectionProtection(lockedTrue)else:# 其他区域可编辑cell.protectionProtection(lockedFalse)ws.protection.sheetTruews.protection.passwordprotect123wb.save(rC:\Reports\report_zone_protect.xlsx)文件级加密openpyxl不支持设置文件打开密码需要用win32comimportwin32com.clientdefencrypt_excel(file_path,password):给Excel文件设置打开密码excelwin32com.client.Dispatch(Excel.Application)excel.VisibleFalseexcel.DisplayAlertsFalsewbexcel.Workbooks.Open(file_path)# 设置打开密码wb.Passwordpassword wb.Save()wb.Close()excel.Quit()returnf文件已加密:{file_path}# 使用encrypt_excel(rC:\Reports\confidential.xlsx,Open2026)批量保护报表defbatch_protect_reports(folder,password,protect_formula_colsNone):批量保护文件夹内所有Excel的公式列importosifprotect_formula_colsisNone:protect_formula_cols[]results[]forfilenameinos.listdir(folder):ifnotfilename.endswith(.xlsx)orfilename.startswith(~$):continuefilepathos.path.join(folder,filename)try:wbopenpyxl.load_workbook(filepath)forwsinwb.worksheets:# 全部解锁forrowinws.iter_rows():forcellinrow:cell.protectionProtection(lockedFalse)# 锁定指定列forcol_numinprotect_formula_cols:forrowinrange(1,ws.max_row1):ws.cell(rowrow,columncol_num).protectionProtection(lockedTrue)# 保护工作表ws.protection.sheetTruews.protection.passwordpassword ws.protection.formatCellsFalsews.protection.formatColumnsFalsews.protection.formatRowsFalsewb.save(filepath)results.append(f成功:{filename})exceptExceptionase:results.append(f失败:{filename}-{str(e)})returnresults# 使用保护C列和D列公式列resultsbatch_protect_reports(rC:\Reports\月度报表,passwordreport2026,protect_formula_cols[3,4])forrinresults:print(r)有什么坑坑1保护密码容易被破解openpyxl的工作表保护密码只是简单的哈希安全性很低# openpyxl的sheet protection密码只是防止误操作# 任何人都可以用工具移除不能作为安全措施# 如果需要真正的安全用文件级加密# 文件级密码win32com的wb.Password使用AES加密安全性较高# 工作表保护 防误操作# 文件加密 防未授权访问坑2保护后无法操作数据设了工作表保护后后续自动化流程需要写入数据会失败# 问题保护后无法写入ws.protection.sheetTruews[A1].value新数据# 可能失败# 解决先取消保护操作完再恢复ws.protection.sheetFalsews[A1].value新数据[video(video-kJip7xx0-1783501014110)(type-csdn)(url-https://live.csdn.net/v/embed/524992)(image-https://v-blog.csdnimg.cn/asset/b59aed2f01d4fe8583467562aaf4dcfd/cover/Cover0.jpg)(title-temu店群自动化报活动案例)]ws.protection.sheetTrue# 或者写入时忽略保护# openpyxl的写入不受sheet protection影响它只是设置Excel的UI保护# 真正的写入限制只有在Excel应用中才有效坑3win32com加密后文件格式变化# 问题用win32com设密码后文件可能从xlsx变成xlsm# 或者密码设置后SaveAs需要指定FileFormat# 正确做法wb.Passwordpassword wb.SaveAs(filepath,FileFormat51,# 51 xlsx格式Passwordpassword)坑4保护后用户无法使用筛选和排序默认保护会禁用筛选和排序用户体验差# 需要显式允许这些操作ws.protection.sheetTruews.protection.passwordmypasswordws.protection.autoFilterFalse# 允许使用筛选ws.protection.sortFalse# 允许排序ws.protection.pivotTablesFalse# 允许操作透视表ws.protection.insertRowsFalse# 允许插入行ws.protection.deleteRowsFalse# 允许删除行# True 禁止, False 允许反直觉坑5已有保护密码的文件无法修改需要修改一个已加密码保护的文件但不知道密码# openpyxl可以读取有工作表保护的文件但修改后保存会丢失保护设置wbopenpyxl.load_workbook(protected.xlsx)wswb.active# 移除工作表保护ws.protection.sheetFalsews.protection.passwordNone# 或 ws.protection.disable()# 修改数据ws[A1].value新数据# 重新设置保护ws.protection.sheetTruews.protection.passwordnewpasswordwb.save(protected.xlsx)