前提:因使用VBA代碼可讀性和 擴充性差,想用Python實現,以提高 複用率。
目前的想法是 在Excel中寫入基礎資訊,執行宏時,VBA中通過庫調用Python代碼,產生統計資料,請問可以使用什麼庫來實現?
回複內容:
維護一個基於Excel的項目5年的苦逼怒答。“python(或者其他什麼語言)操作excel”檔案,按是否依賴Excel,可以分為兩類。
第一類,excel檔案只是用來儲存資料,python對它的操作只是讀和寫。這種時候,對檔案的操作不需要依賴Excel,你的機器上沒有excel也能執行。在這種情境下,csv,txt等Excel支援的文字檔格式,都是很好的選擇。這種情況,所謂的"python讀寫excel檔案",實際上就是python讀寫文字檔,無非是這個文字檔是有一定格式的,找個csv的類庫處理能事半功倍。如果csv/txt太過簡單,檔案內需要多個worksheet,那麼可以儲存為xls/xlsx格式,對應的讀寫操作用樓上提到的xlrd和openpyxl。
第二類,對檔案的操作不止讀寫資料,包含更多的其他動作,比如插入行列,設定字型顏色,等待。這時候檔案格式必然是excel only的格式(xls*)。對應的操作,其實最基礎的,是通過COM調用Excel的API,實際上VBA調用的也是這個東西。python,以及其他很多語言,都是支援COM的,在指令碼裡面擷取到了Excel.Application,就可以像在VBA裡面一樣寫Application.Workbooks(1).Worksheet(1)了。下面sample是ruby寫的,python應該也差不多。
#引用COM
require "win32ole"
#串連一個已經開啟的Excel
xlApp = WIN32OLE.connect("Excel.Application")
#接下去就和VBA的寫法沒什麼兩樣了
wb = xlApp.activeWorkbook #擷取當前啟用的workbook
ws = wb.worksheets(1) #擷取第一個worksheet
ws.range('A1').value = "hello" #在sheet1的A1寫入“hello”搜尋pyxll,你值得擁有有了xlwings,excel就成了個gui了,結合numpy,pandas各種爽。
還有比如直接插入matplotlib圖表,比如利用python內建的sort一行程式碼完成vba寫個幾十行大一百行才能完成的複雜排序。
剛看了下新版api,又有新的黑科技了,可以excel裝個外掛程式然後用python來寫自訂公式改用C#也可以,不需要一定用VBA。而且根據政策,等以後移植到UWP之後,都用C#了。我想用js…逃跑ε=(´o`)cython也不能脫離python runtime。那個python.dll還是要的。excel調用python沒問題。可以用pywin32,支援com。
我原來也用過,用python寫了一個函數,在excel調用。
你這個需求感覺用cx freeze封裝一下,在用戶端安裝就行了,不需要動用cython。我曾經也有這樣的想法,因為實在很難適應vba的文法,寫一會vba,再寫別的就各種掰不回來。
樓上各位提到的工具多少也試過,都沒成功。
最後我用了一種曲線救國的方法:
1.先用vba寫匯出json的函數,注意,是函數,可以把excel裡的資料直接轉化為json並直接儲存,每次來源資料變化都會重新匯出並儲存。
2.用python讀取json資料,進行運算,眾所周知,python讀取json的方法是很友好的
當然缺點就是,這種方式只能用於運算資料,不能更改excel的資料datanitro這個問題我覺得我還是有點專業的,雖不是財務,但是大量處理財務資料。
背景:公司程式員是絕對不可能給我一個資料庫帳號的,就算只有讀許可權也不行。公司內網web系統auth不完善,我可以輕鬆繞過許可權爬資料。
起初,用xlrd和xlwt。後來發現這兩個工具寫起來有點麻煩,而且效能不是很優秀。於是改用內建的csv模組。在這個階段,自動化程度不高,需要大量人工幹預和預先處理
現在因為資料量大了,我就在本地弄了個lnmp環境和navicat,將paypal未經處理資料匯入,操作資料庫。現在正在寫這方面的指令碼,結合email模組和windows計劃任務完成全部自動化。SolverStudio for Excel
支援C# Python等,有沒有人試過?
"An integrated environment for optimisation using modelling languages within Excel"
Developing for Excel
If you are interested in developing for Excel, you might like the following resources.
Excel XLL add-in libary for writing C++ add-ins using Visual Studio 2010 (incl Express): Excel xll add-in library
Excel-DNA provides .net integration with Excel: Excel-DNA - Home
PyXLL
, a “free for non-commercial and evaluation purposes” Excel extension, allows Python code to be used to add menus and user functions within Excel.
Pycel
will compile a spreadsheet into Python. It was developed to allow non-linear optimisation of aircraft design.
PyWorkbooks
is an open source Python interface for Excel and GNumeric; it looks very nice, with careful thought given to speed issues (e.g. implenting Generators).
Python for Excel
(PFE) is a commercial (?) Python scripting system for Excel that “provides a complete set of tools for building of fully featured applications with Excel front end. It is in-process control of Excel with an out-of-process developement and debugging environment.”