提问人:Tom4 提问时间:9/26/2023 最后编辑:Tom4 更新时间:9/26/2023 访问量:66
Python&Excel:尝试运行宏/刷新透视时出现问题
Python&Excel: Issue when trying to run a macro / refresh pivots
问:
我正在使用 Knime 生成一个 Excel,然后我使用 python 对文件进行一些调整。 我正在从 Knime 的输出中获取数据并将它们粘贴到预先格式化的 Template.xlsm 中,该模板在粘贴新数据后要刷新多个数据透视表。一切都在工作,直到最后一步,当我需要刷新枢轴时。
我尝试了不同的解决方案:
- 在 Template.xlsm 中创建一个宏和一个按钮,以便当用户打开文件时,他可以直接刷新所有透视 -->这不起作用,因为我使用的是 openpyxl,并且当生成新文件时,所有形状都被删除了
- 使用 win32com(代码如下)直接用 python 刷新透视表 -->它不起作用,因为我收到 PermissionError: [Errno 13] 权限被拒绝。
import win32com.client
xl = win32com.client.DispatchEx("Excel.Application")
wb = xl.workbooks.open("path\file.xlsm")
xl.Visible = True
wb.RefreshAll()
xl.Quit()
- 使用 Python 直接运行宏。在保存文件之前和保存文件之后,我都尝试了这两种方法(基本上再次阅读并尝试运行宏)。-->它不起作用,因为我总是收到错误:PermissionError:[Errno 13] 权限被拒绝。
import xlwings as xw
xl=win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(os.path.abspath("excelsheet.xlsm"), ReadOnly=1)
xl.Application.Run("excelsheet.xlsm!modulename.macroname")
xl.Application.Save() the
xl.Application.Quit()
我认为这与以下事实有关:在我的组织中,我们在所有文件中都有一个强制性的敏感度级别标签。但是,我发现奇怪的是,当我仍在使用脚本处理它时(我的意思是在保存它并因此生成最终的 file.xlsm 之前),我无法运行宏。
- 我还尝试通过使用 python 分配标签 ID 来自动设置敏感度级别(使用下面的代码)--> 我不断收到错误:PermissionError:[Errno 13] 权限被拒绝。
wb = xw.Book('file.xlsm')
labelinfo = wb.api.SensitivityLabel.CreateLabelInfo()
labelinfo.AssignmentMethod = 2
labelinfo.Justification = 'init'
labelinfo.LabelId = 'YOUR-ID-GOES-HERE'
wb.api.SensitivityLabel.SetLabel(labelinfo, labelinfo)
您有什么建议或方法可以最终绕过敏感度标签吗?
这是我不断收到的错误:
Executing the Python script failed: Traceback (most recent call last):
File "<string>", line 208, in <module>
File "C:\ProgramData\anaconda3\envs\py3_knime\lib\site-packages\openpyxl\workbook\workbook.py", line 407, in save
save_workbook(self, filename)
File "C:\ProgramData\anaconda3\envs\py3_knime\lib\site-packages\openpyxl\writer\excel.py", line 291, in save_workbook
archive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True)
File "C:\ProgramData\anaconda3\envs\py3_knime\lib\zipfile.py", line 1248, in __init__
self.fp = io.open(file, filemode)
PermissionError: [Errno 13] Permission denied: 'C: ...\file.xlsm'
答:
0赞
taller
9/26/2023
#1
在测试之前,请使用 Windows 任务管理器关闭所有 Excel 实例。 需要保存更改。workbook.Close
# Env: pywin32 v305, Python 3.11, Excel 365
import win32com.client
xl = win32com.client.DispatchEx("Excel.Application")
xl_file = r"d:/temp/py.xlsm"
wb = xl.workbooks.open(xl_file)
xl.Visible = True
wb.RefreshAll()
wb.Close(SaveChanges=1)
xl.Quit()
删除 ,代码也很好用。ReadOnly=1
import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
xl_file = r"d:/temp/py.xlsm"
wb = xl.workbooks.open(xl_file)
xl.Application.Run("py.xlsm!mdl1.demo")
# save active workbook
wb.Close(SaveChanges=1)
xl.Quit()
评论
0赞
Tom4
9/26/2023
感谢您的回复。它还不起作用。我不断收到我刚刚在上面描述中发布的错误。
0赞
taller
9/26/2023
创建新的 xlsm 并测试代码。Excel 文件可能因 Excel 应用程序崩溃而被锁定。
评论
win32com
RefreshAll
Open