简体   繁体   English

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

[英]xlsxwriter python how to execute VBA function in python and export as .xlsx

I've extracted and imported a vba function (autofit all rows) into my python xlsxwriter script.我已将 vba function(自动调整所有行)提取并导入到我的 python xlsxwriter 脚本中。 If I open the.xlsm document, I can use the macro via Alt+F8 and it works as expected.如果我打开 .xlsm 文档,我可以通过 Alt+F8 使用宏,它可以按预期工作。 But, I'd like to run the macro within python, then export the file as.xlsx但是,我想在 python 中运行宏,然后将文件导出为.xlsx

Here is my macro:这是我的宏:

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

Here is my command prompt vbaProject.bin extraction这是我的命令提示符 vbaProject.bin 提取

C:\Users\username\Downloads> python C:\file\location\vba_extract.py macro\file\location\site_status_macro.xlsm
Extracted: vbaProject.bin

Here is my code importing pandas dataframes and adding them to seperate sheets.这是我导入 pandas 数据帧并将它们添加到单独的工作表中的代码。 The last part of my python script is not working -- the script runs fine, but when I open the document, the macro has clearly not been executed.我的 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

The last part isn't working.最后一部分不起作用。 I've successfully imported my macro, but now i want to run it to autofit all rows.我已经成功导入了我的宏,但现在我想运行它来自动调整所有行。 how do I run this macro in python?如何在 python 中运行此宏? I'd like to run it in python, and then export it to.xlsx file.我想在python中运行,然后导出到.xlsx文件。

Thanks so much for any and all help!非常感谢您的任何帮助!

Please try using package xlwings .请尝试使用 package xlwings
Install it pip install 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