python调用excel vba函数

一、背景

  存储数据为.xlsb类型的文件时,用python读取为dataframe数据格式时,非常麻烦,目前没有发现python友好的处理库。因此通过在excel上用vba对.xlsb文件读取转换为.xlsx后,再用python的pandas库读取.xlsx文件为dataframe数据格式。另外python也可以同时调用vba宏,然后直接运行,减少了再excel上手动运行操作,解决了跨软件运行。

二、excel上vba编写

  • 将"D:\vba\data\拉美"路径下的.xlsb文件转换为.xlsx文件

Dim sTemp As String
Sub conv_chatfields()

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.Visible = False
    '文件需要转换的路径:D:\vba\data\拉美
    all_path = Array("D:\vba\data\拉美")
    country_name = Array("拉美")
    For i = LBound(all_path) To UBound(all_path)
        For j = LBound(country_name) To UBound(country_name)
            Path = all_path(i) & country_name(j) & "\"
            Filename = Dir(Path & "*.xlsb")
            Do While Filename <> "":
                If Filename = "" Then
                    Exit Do
                End If
                
                '判断后缀名分隔符.的位置
                sTemp = Filename
                iPos = Len(sTemp) - VBA.InStr(1, VBA.StrReverse(sTemp), ".")
                If iPos <> 0 Then
                    sTemp = Mid(sTemp, 1, iPos)
                    Workbooks.Open Filename:=Path & Filename
                    
                    ActiveWorkbook.SaveAs Filename:=Path & sTemp & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
                    ActiveWindow.Close
                End If
                Filename = Dir
            Loop
        Next
    Next
    Application.ScreenUpdating = True
End Sub

三、python调用vba运行

  • 调用vba程序。需要安装win32com库
import win32com.client 
print('转换开始'
#####调用vba程序。需要安装win32com库 xls = win32com.client.Dispatch("Excel.Application") xls.workbooks.Open(r"D:\李耀瑞\vba\三大渠道自动化脚本\四大渠道运行\demo\文件格式转换.xlsm") ##存储vba代码的文件 try: xls.Application.Run('conv_chatfield.conv_chatfield') ##开始调用vba宏
except Exception as e: print(e) xls.Application.Quit() print('转换完成!')

 

posted on 2021-10-14 16:46  LiErRui  阅读(2810)  评论(0编辑  收藏  举报

导航