Python通过修改系统注册表,强制设置Excel宏信任级别

背景

最近在进行财务平台报告自动化建设,由于涉及的都是Excel文件,并且文件里面有很多合并单元格情况,所以在处理数据时用pandas不是很方便,综合考虑后利用VBA来处理。自己也是先学的VBA,后学的Python,所以平台上的一些功能很快开发完,接下来问题就出现了,在Python调用VBA时,出现程序不能运行的情况,经过反复排查发现是宏信任级别的问题。

宏已被禁用.png

出现这种情况,可以通过手动修改宏的信任级别,在文件---选项----信任中心----宏设置,把宏设置为“启用所有宏”,如下所示:

信任中心.png
信任级别.png

但是作为自动化平台,需要考虑到程序健壮性,不能总是手动来修改,于是在网上查找了相关资料,发现可以通过修改系统注册表的方法,来规避这个问题

注册表.png

注册表是什么?

注册表(Registry,繁体中文版Windows操作系统称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95操作系统开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今。

从定义来看,注册表是用于存储系统和应用程序的设置信息

通过Python修改注册表

#导入相关库
import winreg
import win32com.client

#定义Excel程序
xl=win32com.client.Dispatch("Excel.Application")

#指定注册表文件夹位置并获取
subkey='Software\\Microsoft\\Office\\' + xl.Version+'\\Excel\\Security'
key=winreg.OpenKey(winreg.HKEY_CURRENT_USER,subkey,0, winreg.KEY_SET_VALUE)

#修改宏信任级别为1
winreg.SetValueEx(key, 'VBAWarnings', 0, winreg.REG_DWORD, 1)

通过以上程序,及可以成功把Excel宏的信任级别修改为“启用所有宏”,这样就全部实现了自动化


以上是自己实践中遇到的一些点,分享出来供大家参考学习,欢迎关注微信公众号DataShare,不定期分享干货

autocad已成功安装,手动运行桌面快捷方式"C:\Program Files\Autodesk\AutoCAD 2024\acad.exe" /product ACAD /language "zh-CN"没有问题,并且能够打开已经存在的,dwg文件。程序运行报错2025-04-01 13:15:12,110 - INFO - 开始连接 AutoCAD 2025-04-01 13:15:12,111 - ERROR - 连接到已运行的 AutoCAD 实例失败,错误信息: (-2147221021, '操作无法使用', None, None),尝试创建新实例 2025-04-01 13:15:12,117 - ERROR - 创建新的 AutoCAD 实例失败,错误信息: (-2147221164, '没有注册类', None, None) 2025-04-01 13:15:12,117 - INFO - 开始读取 Excel 文件: D:/work/A24匝道桥成桥线型.xlsx 系统高级设置增加了环境变量C:\Program Files\Autodesk\AutoCAD 2024\acad.exe 程序仍不能正常启动 如果先手动运行autocad,但不新建一个drawing1.dwg,或者打开一个已存在的.dwg程序执行报错: 14:02:42 正在保存和验证项目... 14:02:43 项目开始:CAD项目 14:02:43 加载依赖项结束 14:02:43 正在加载流程 14:02:44 加载流程完毕 14:02:44 [错误] 执行Python代码失败。详细错误信息:2025-04-01 14:02:44,706 - INFO - 开始连接 AutoCAD 2025-04-01 14:02:44,719 - INFO - 成功连接到已运行的 AutoCAD 实例 Traceback (most recent call last): File "C:\Users\13766\Documents\Encoo\CAD项目\.code\Python\执行Python代码.py", line 255, in <module> acad = connect_and_setup_autocad() ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\13766\Documents\Encoo\CAD项目\.code\Python\执行Python代码.py", line 40, in connect_and_setup_autocad doc = acad.ActiveDocument ^^^^^^^^^^^^^^^^^^^ File "C:\Users\13766\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32com\client\dynamic.py", line 620, in __getattr__ ret = self._oleobj_.Invoke(retEntry.dispid, 0, invoke_type, 1) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pywintypes.com_error: (-2147352567, '发生意外。', (0, 'AutoCAD', '无法获取 Document 对象', 'C:\\Program Files\\Autodesk\\AutoCAD 2024\\HELP\\OLE_ERR.CHM', -2145320900, -2145320900), None) ; 输出: ; 结束代码: 1。 14:02:44 项目结束:CAD项目. 耗时:00:00:00.944 如果先手动运行autocad,新建一个drawing1.dwg,或者打开一个已存在的.dwg程序能够正常执行
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据人阿多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值