Python&Excel:尝试运行宏/刷新数据透视时出现问题

问题描述 投票:0回答:1

我正在使用 Knime 生成 Excel,然后使用 python 对文件进行一些调整。 我从 Knime 的输出中获取数据,并将它们粘贴到预先格式化的 Template.xlsm 中,该模板有几个数据透视表,在粘贴新数据后要刷新。一切都正常,直到最后一步,当我需要刷新枢轴时。

我尝试过不同的解决方案:

  • 在 Template.xlsm 中创建一个宏和一个按钮,以便当用户打开文件时他可以直接刷新所有枢轴 --> 这不起作用,因为我正在使用 openpyxl 并且当生成新文件时所有形状正在被删除
  • 使用 win32com(使用下面的代码)直接使用 python 刷新数据透视表 --> 它不起作用,因为我收到 PermissionError: [Errno 13] Permission returned.
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()

我认为这与以下事实有关:在我的组织中,我们在所有文件中都有强制性的敏感级别标签。然而,我发现奇怪的是,虽然我仍在使用脚本处理它(我的意思是在保存它并因此生成最终文件.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)

您有什么建议或方法来最终绕过敏感度标签吗?

python excel openpyxl win32com xlwings
1个回答
0
投票

测试前请使用 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()
© www.soinside.com 2019 - 2024. All rights reserved.