excel - xlsxwriter 在“thisworkbook”上添加一个宏以在打开时执行
问题描述
我已经从代码在 Thisworkbook 中的 XMLS 中提取了 bin 文件,因为我需要在打开文件时运行宏我无法使用以下代码创建一个 XLSM,它在打开时执行代码:创建的 XLSM 具有“ Thisworkbook”和“Thisworkbook1”,并且代码在打开时未运行
import xlsxwriter
strn =" Feb "
## Region Level
Loc = Location.reset_index()
for n, g in Matrix.groupby('Cluster'):
out_path = "D:/Actions/Results/Action-Opp " + n.strip(" ") + strn + ".xlsx"
writer = pd.ExcelWriter(out_path , engine='xlsxwriter')
C =Loc[Loc.Cluster==n].iloc[:,1:]
B =SPs[SPs.Cluster==n]
D = PDet[PDet.Cluster==n]
F = OppD[OppD.Cluster==n]
Total.iloc[:,:-2].to_excel(writer, sheet_name="Region", index=True)
C.to_excel(writer, sheet_name="Stores", index=False)
B.to_excel(writer, sheet_name="SPs", index=False)
D.to_excel(writer, sheet_name="Portfolio Details", index=False)
F.to_excel(writer, sheet_name="Opportunity Details", index=False)
workbook = writer.book
workbook.filename = "D:/Actions/Results/Action-Opp " + n.strip(" ") + strn + ".xlsm"
worksheet1 = writer.sheets['Region']
worksheet2 = writer.sheets['Stores']
worksheet3 = writer.sheets['SPs']
workbook.set_vba_name('Stores')
workbook.add_vba_project('D:/Actions/vbaProject.bin')
writer.save()
elapsed = timeit.default_timer() - start_time
print(elapsed)
解决方案
这是创建一个 xlsm 文件的方法,该文件将包含一个宏,该宏将在您每次打开工作簿时自动运行(只要文件的文件夹设置为受信任的位置):
1)创建一个excel文件,插入一个新模块并输入这个vba代码:
Sub Auto_Open()
MsgBox "Hello World!"
End Sub
将文件另存为 xlsm。
2) 使用 xlsxwriter 的 vba_extract.py 实用程序提取 vba 代码。
3)运行以下python脚本:
import xlsxwriter
# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('test.xlsx')
workbook.filename = 'test.xlsm'
worksheet = workbook.add_worksheet()
# Inject the bin file we extracted earlier
workbook.add_vba_project('./vbaProject.bin')
# Finally write the file
workbook.close()
这将创建一个文件,其中注入了宏,并在您每次打开它时自动运行。
如果您仍然遇到问题,我建议您检查两件事:首先,如果您的宏以关键字开头,Sub Auto_Open()
其次您是否已将打开文件的文件夹设置为受信任位置(因为默认情况下,办公应用程序将阻止来自运行以防它们包含恶意代码)。
推荐阅读
- mysql - Mysql GROUP BY with MAX(DATE) and MIN (DATE)
- javascript - 如何在不循环的情况下替换字符串变量中的每个字符?
- c# - 如何定义自引用的泛型类型参数
- python - Python Dataclasses:在冻结的 Dataclass 中模拟默认工厂
- php - Magento 1 Rest 调用在每秒调用一次时导致 php 错误
- javascript - 你能告诉我为什么“未定义”出现在点击随机图像时?
- git - 管理 Linux 服务器上多个 git 存储库的用户访问权限,根据 SSH 密钥授予每个存储库的访问权限?
- javascript - 在来自不同文件的 Web 组件槽中呈现 HTML5 模板
- javascript - JavaScript 返回具有最高分数的数组项
- r - 将此 json 文件作为数据框带入 R