簡體   English   中英

從VBA到Python,然后再回到Excel

[英]From VBA to Python and back again to Excel

我正在嘗試使用Excel和Python 3.7.1制作自動化程序。

  • 從Excel工作表開始,用戶應單擊一個按鈕,
    被分配了一個宏(實際上它是一個ActiveX控件命令按鈕)。
  • 該宏運行Python,然后關閉Excel窗口。
  • Python腳本從另一個.xlsx文件讀取數據,進行回歸並將結果存儲到pandas DataFrame中。

我現在想要做的就是將此DataFrame寫入運行Python的.xlsm文件中的第二張表(已創建,但為空)。

我嘗試了不同的方法,在互聯網上尋求了很多幫助,但似乎沒有任何效果。 我還閱讀了有關“ vbaProject.bin”的信息,但是我無法從命令提示符下調用它的文件中提取內容。

數據按預期顯示,但按鈕不再“可單擊”,或者根本不顯示數據。 有時文件甚至不可用,因為它的類型已被python更改。

我曾經用過openpyxl和xlsxwriter但徒勞。 這是其中的一段代碼:

wb = load_workbook('PythonLauncher.xlsm', keep_vba=True)
writer = pd.ExcelWriter('PythonLauncher.xlsm', engine=openpyxl)
writer.book = wb
DtFrm.to_excel(writer, writer.book.sheetnames[1], columns=None, index=False)
writer.save()
writer.close()

最佳結果將是在.xlsm文件的第二頁中獲取DataFrame而不丟失單擊功能。

您可以從Python輕松運行Excel / VBA。 下面是兩個完全相同的操作示例。

from __future__ import print_function
import unittest
import os.path
import win32com.client

class ExcelMacro(unittest.TestCase):
    def test_excel_macro(self):
        try:
            xlApp = win32com.client.DispatchEx('Excel.Application')
            xlsPath = os.path.expanduser('C:\\your_path\\test.xlsb')
            wb = xlApp.Workbooks.Open(Filename=xlsPath)
            xlApp.Run('Macro1')
            wb.Save()
            xlApp.Quit()
            print("Macro ran successfully!")
        except:
            print("Error found while running the excel macro!")
            xlApp.Quit()
if __name__ == "__main__":
    unittest.main()

import os
import win32com.client

#Launch Excel and Open Wrkbook
xl=win32com.client.Dispatch("Excel.Application")  
xl.Workbooks.Open(Filename="C:\\your_path\\test.xlsm") #opens workbook in readonly mode. 

#Run Macro
xl.Application.Run("excelsheet.xlsm!modulename.macroname") 

#Save Document and Quit.
xl.Application.Save()
xl.Application.Quit() 

#Cleanup the com reference. 
del xl

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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