如何在Excel中調用Python腳本,實現數據自動化處理

2022-06-01     CDA數據分析師

原標題:如何在Excel中調用Python腳本,實現數據自動化處理

作者:朱衛軍

來源:Python大數據分析

這次我們會介紹如何使用xlwings將Python和Excel兩大數據工具進行集成,更便捷地處理日常工作。

說起Excel,那絕對是數據處理領域王者般的存在,儘管已經誕生三十多年了,現在全球仍有7.5億忠實用戶,而作為網紅語言的Python,也僅僅只有700萬的開發人員。

Excel是全世界最流行的程式語言。對,你沒看錯,自從微軟引入了LAMBDA定義函數後,Excel已經可以實現程式語言的算法,因此它是具備圖靈完備性的,和Java、Java、Python一樣。

雖然Excel對小規模數據場景來說是剛需利器,但它面對大數據時就會有些力不從心。

這就是本文要講到的主題,Python的第三方庫-xlwings,它作為Python和Excel的交互工具,讓你可以輕鬆地通過VBA來調用Python腳本,實現複雜的數據分析。

比如說自動導入數據:

或者隨機匹配文本:

一、為什麼將Python與Excel VBA集成?

VBA作為Excel內置的宏語言,幾乎可以做任何事情,包括自動化、數據處理、分析建模等等,那為什麼要用Python來集成Excel VBA呢?主要有以下三點理由:

  1. 如果你對VBA不算精通,你可以直接使用Python編寫分析函數用於Excel運算,而無需使用VBA;

    1. Python相比VBA運行速度更快,且代碼編寫更簡潔靈活;

    1. Python中有眾多優秀的第三方庫,隨用隨取,可以節省大量代碼時間;

    如果你對VBA不算精通,你可以直接使用Python編寫分析函數用於Excel運算,而無需使用VBA;

    Python相比VBA運行速度更快,且代碼編寫更簡潔靈活;

    Python中有眾多優秀的第三方庫,隨用隨取,可以節省大量代碼時間;

    對於Python愛好者來說,pandas、numpy等數據科學庫用起來可能已經非常熟悉,如果能將它們用於Excel數據分析中,那將是如虎添翼。

    二、為什麼使用xlwings?

    Python中有很多庫可以操作Excel,像xlsxwriter、openpyxl、pandas、xlwings等。

    但相比其他庫,xlwings性能綜合來看幾乎是最優秀的,而且xlwings可以實現通過Excel宏調用Python代碼。

    圖片來自早起Python

    xlwings的入門使用這裡不多做講解,如果大家還不了解,先看看我之前寫的入門介紹: xlwings,讓excel飛起來!

    安裝xlwings非常簡單,在命令行通過pip實現快速安裝:

    pip install python

    安裝好xlwings後,接下來需要安裝xlwings的 Excel集成插件,安裝之前需要關閉所有 Excel 應用,不然會報錯。

    同樣在命令行輸入以下命令:

    xlwings addin install

    出現下面提示代表集成插件安裝成功。

    xlwings和插件都安裝好後,這時候打開Excel,會發現工具欄出現一個xlwings的菜單框,代表xlwings插件安裝成功,它起到一個橋樑的作用,為VBA調用Python腳本牽線搭橋。

    另外,如果你的菜單欄還沒有顯示「開發工具」,那需要把「開發工具」添加到功能區,因為我們要用到宏。

    步驟很簡單:

    1、在"文件"選項卡上,轉到"自定義>選項"。

    2、在「自定義功能區」和「主選項卡」下,選中「開發工具」複選框。

    菜單欄顯示開發工具,就可以開始使用宏。

    如果你還不知道什麼是宏,可以暫且把它理解成實現自動化及批量處理的工具。

    到這一步,前期的準備工作就完成了,接下來就是實戰!

    三、玩轉xlwings

    要想在excel中調用python腳本,需要寫VBA程序來實現,但對於不懂VBA的小夥伴來說就是個麻煩事。

    但xlwings解決了這個問題,不需要你寫VBA代碼就能直接在excel中調用python腳本,並將結果輸出到excel表中。

    xlwings會幫助你創建 .xlsm 和 .py 兩個文件,在 .py 文件里寫python代碼,在 .xlsm 文件里點擊執行,就完成了excel與python的交互。

    怎麼創建這兩個文件呢?非常簡單,直接在命令行輸入以下代碼即可:

    xlwings quickstart ProjectName

    這裡的 ProjectName 可以自定義,是創建後文件的名字。

    如果你想把文件創建到指定文件夾里,需要提前將命令行導航到指定目錄。

    創建好後,在指定文件夾里會出現兩個文件,就是之前說的 .xlsm 和 .py 文件。

    我們打開 .xlsm 文件,這是一個excel宏文件,xlwings已經提前幫你寫好了調用Python的VBA代碼。

    按快捷鍵 Alt + F11 ,就能調出VBA編輯器。

    裡面這串代碼主要執行兩個步驟:

    1、在 .xlsm 文件相同位置查找相同名稱的 .py 文件

    2、調用 .py 腳本里的 main 函數

    我們先來看一個簡單的例子,自動在excel表里輸入 ['a','b','c','d','e']

    第一步:我們把 .py 文件里的代碼改成以下形式。

    importxlwings asxw

    importpandas aspd

    defmain:

    wb = xw.Book.caller

    values = [ 'a', 'b', 'c', 'd', 'e']

    wb.sheets[ 0].range( 'A1').value = values

    @xw.func

    defhello(name):

    returnf"Hello {name}!"

    if__name__ == "__main__":

    xw.Book( "PythonExcelTest.xlsm").set_mock_caller

    main

    然後在 .xlsm 文件 sheet1 中創建一個按鈕,並設置默認的宏,變成一個觸發按鈕。

    設置好觸發按鈕後,我們直接點擊它,就會發現第一行出現了 ['a','b','c','d','e'] 。

    同樣的,我們可以把鳶尾花數據集自動導入到excel中,只需要在.py文件里改動代碼即可,代碼如下:

    importxlwings asxw

    importpandas aspd

    defmain:

    wb = xw.Book.caller

    df = pd.read_csv( r"E:\\test\\PythonExcelTest\\iris.csv")

    df[ 'total_length'] = df[ 'sepal_length'] + df[ 'petal_length']

    wb.sheets[ 0].range( 'A1').value = df

    @xw.func

    defhello(name):

    returnf"Hello {name}!"

    if__name__ == "__main__":

    xw.Book( "PythonExcelTest.xlsm").set_mock_caller

    main

    好了,這就是在excel中調用Python腳本的全過程,你可以試試其他有趣的玩法,比如實現機器學習算法、文本清洗、數據匹配、自動化報告等等。

    Excel+Python,簡直法力無邊。

    參考medium文章

    參考medium文章

    點這裡關注我,記得標星哦~

    CDA課程諮詢

  • 文章來源: https://twgreatdaily.com/zh-cn/264a3938276440fb25fd315e6f4d84f2.html