msoffcrypto-tool库 Excel 加密

一、安装 msoffcrypto-tool

注意: 运行前请确保已执行 pip install msoffcrypto-tool。

二、抽取函数

python 复制代码
import pandas as pd
import msoffcrypto
import io
def encrypt_excel_buffer(buffer, filename, password):
    """
    将内存中的 Excel 数据加密并保存到磁盘
    """
    buffer.seek(0)
    office_file = msoffcrypto.OfficeFile(buffer)
    with open(filename, "wb") as f_out:
        office_file.encrypt(password=password, outfile=f_out)
    buffer.close()

三、先将数据全部写进内存 buffer,关闭 writer 后再加密输出到磁盘。

python 复制代码
for i in ['1','2','3']:
    # 1. 创建内存缓冲区
    buffer = io.BytesIO()
    
    # 2. 将数据写入内存缓冲区而不是直接写磁盘
    with pd.ExcelWriter(buffer, engine='openpyxl') as writer:
        # 写入第一个 Sheet
        df_fh = wnrfh[wnrfh['统筹区'] == i]
        df_fh.to_excel(writer, sheet_name='符合导入', index=False)
        
        # 写入第二个 Sheet
        df_tc = wnrtc[wnrtc['统筹区'] == i]
        df_tc.to_excel(writer, sheet_name='存在个单', index=False)
    
    # 3. 调用加密函数,将内存数据变成加密文件保存
    target_filename = f'未缴费纳入统计审核通过-{i}.xlsx'
    encrypt_excel_buffer(buffer, target_filename, password="你的密码")
print("所有统筹区文件已加密生成。")

1.with 语句的作用:

在 with pd.ExcelWriter... 结束时,Pandas 会自动完成 Excel 的结构构建并将其"保存"到 buffer 中。只有在 writer 关闭后,buffer 里的内容才是完整的 Excel 文件。

2.避免磁盘残留:

通过 io.BytesIO(),整个过程中没有任何一个时刻会在磁盘上产生"不带密码"的临时文件,安全性最高。

3.文件名处理:

使用了 Python 的 f-string (f'...'),比 .format() 更简洁,适合 2026 年的主流写法。

4.性能:

此方法在内存中操作,对于几万行以内的数据,速度会比先写磁盘再加密快很多。

相关推荐
前端精髓6 小时前
结构化输出with_structured_output(抽卡)
python·langchain
尹人入圣7 小时前
目前热门的IP驱动产业新场景新工具
网络·python·网络协议·tcp/ip
Nuanyt8 小时前
Agent 学习笔记(下篇三):上线工程、进阶选择与操作界面(Stage 7 / 7.5 / 8 + 延伸路线)
笔记·python·学习·memory·aiagent·harness
吴卫斌8 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
2601_967987378 小时前
Python——入门级(定义功能def函数)
python·函数·可变参数·默认参数·关键字参数
专注仿真10 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放10 小时前
Python基础语法练习题(75)
开发语言·python·学习
黑十12 小时前
PyTorch 报 “no CUDA GPUs are available“ 怎么办?3 步排查
服务器·网络·人工智能·pytorch·python
threelab12 小时前
开源图片去水印代码
python
taller_200013 小时前
【012】数据类型入门: Excel 数据到 Python 值的转换
python·excel·pie·py