【问题标题】:Python Programmatic access to VBA in ExcelPython 以编程方式访问 Excel 中的 VBA
【发布时间】:2020-01-14 01:54:33
【问题描述】:

我正在尝试编写一个 python 脚本,它将 VBA 代码插入到由不同程序输出的工作簿中,以简化数据分析。现在我让用户进入 Excel,打开 VBA 编辑器并从文件中添加一个模块,然后运行宏。我已经完成了 python 脚本来做我想做的事情,但我仍然对 Excel 信任设置感到困扰。这个想法是让尽可能多的用户“工作”退出流程,根据这篇文章:Programmatic Access To Visual Basic Project Is Not Trusted,我的代码应该可以允许访问,但我仍然收到 com_error。当然,我不能就我的问题对这个问题发表评论,所以我在这里写一个全新的问题。我的公司非常重视网络安全,所以我也考虑过这可能只是某种原因是不允许的,但我不确定这是否可行。非常感谢任何帮助或建议。

我的代码的必要部分:

import win32com
import win32com.client
import pythoncom
import tkinter as tk
from tkinter import filedialog
import ctypes
import win32api
import win32con

excel = win32com.client.Dispatch("Excel.Application")
workbook = excel.Workbooks.Open(Filename=fs)

key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,
                                    "Software\\Microsoft\\Office\\16.0\\Excel"
                                    + "\\Security", 0, win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx(key, "AccessVBOM", 0, win32con.REG_DWORD, 1)

excelModule=workbook.VBProject.VBComponents.Add(1)
excelModule.CodeModule.AddFromString(macro)

我也尝试在打开文件之前进行密钥修改,但这并没有改变任何东西。

【问题讨论】:

    标签: python excel


    【解决方案1】:

    嗯,我一直在玩,自己想通了。事实证明,密钥修改需要在您打开 Excel 应用程序之前进行。像这样:

    import win32com
    import win32com.client
    import pythoncom
    import tkinter as tk
    from tkinter import filedialog
    import ctypes
    import win32api
    import win32con
    
    key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,
                                "Software\\Microsoft\\Office\\16.0\\Excel"
                                + "\\Security", 0, win32con.KEY_ALL_ACCESS)
    win32api.RegSetValueEx(key, "AccessVBOM", 0, win32con.REG_DWORD, 1)
    
    excel = win32com.client.Dispatch("Excel.Application")
    workbook = excel.Workbooks.Open(Filename=fs)
    excelModule=workbook.VBProject.VBComponents.Add(1)
    excelModule.CodeModule.AddFromString(macro)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2010-11-11
      相关资源
      最近更新 更多