[英]xlsxwriter python how to execute VBA function in python and export as .xlsx
我已將 vba function(自動調整所有行)提取並導入到我的 python xlsxwriter 腳本中。 如果我打開 .xlsm 文檔,我可以通過 Alt+F8 使用宏,它可以按預期工作。 但是,我想在 python 中運行宏,然后將文件導出為.xlsx
這是我的宏:
Sub AutoFitAll()
Application.ScreenUpdating = False
Dim wkSt As String
Dim wkBk As Worksheet
wkSt = ActiveSheet.Name
For Each wkBk In ActiveWorkbook.Worksheets
On Error Resume Next
wkBk.Activate
Cells.EntireColumn.AutoFit
Next wkBk
Sheets(wkSt).Select
Application.ScreenUpdating = True
End Sub
這是我的命令提示符 vbaProject.bin 提取
C:\Users\username\Downloads> python C:\file\location\vba_extract.py macro\file\location\site_status_macro.xlsm
Extracted: vbaProject.bin
這是我導入 pandas 數據幀並將它們添加到單獨的工作表中的代碼。 我的 python 腳本的最后一部分不起作用——腳本運行良好,但是當我打開文檔時,宏顯然沒有執行。
import pandas as pd
import win32com.client as win32
df1 = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
df2 = pd.DataFrame(data={'col3': [5, 6], 'col4': [7, 8]})
df3 = pd.DataFrame(data={'col5': [9, 10], 'col6': [11, 12]})
path = 'C:/Users/username/Downloads/'
filename = path + 'final_export.xlsx'
filename_macro = path + 'final_export.xlsm'
with pd.ExcelWriter(filename, engine='xlsxwriter') as writer:
names = ['Sheet1', 'Sheet2', 'Sheet3']
dfs = [df1, df2, df3]
for df, name in zip(dfs, names): df.to_excel(writer, sheet_name=name)
workbook = writer.book
workbook.filename = filename_macro
workbook.add_vba_project(path + 'vbaProject.bin')
xl = win32.Dispatch('Excel.Application')
xl.Workbooks.Open(Filename=filename_macro, ReadOnly=1)
xl.Application.Run("'final_export.xlsm'!AutoFitAll")
xl.Application.Quit()
del xl
最后一部分不起作用。 我已經成功導入了我的宏,但現在我想運行它來自動調整所有行。 如何在 python 中運行此宏? 我想在python中運行,然后導出到.xlsx文件。
非常感謝您的任何幫助!
請嘗試使用 package xlwings
。
安裝它pip install xlwings
。
import xlwings
excel_app = xlwings.App(visible=True, add_book=False)
excel_book = excel_app.books.open("final_export.xlsm")
run_macro = excel_book.app.macro('Module1.AutoFitAll')
run_macro()
excel_app.quit()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.