excel中想實現使用Python代替VBA,請問應該怎麼做?

來源:互聯網
上載者:User
前提:因使用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.”
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.