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('轉換完成!')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM