簡體   English   中英

xlsxwriter python 如何執行 VBA function 和 export as。

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM