1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        如何在Excel中調(diào)用Python腳本,實(shí)現(xiàn)數(shù)據(jù)自動(dòng)化處理

        共 3413字,需瀏覽 7分鐘

         ·

        2022-02-23 12:34


        二條:有了這款Python神器,新手也會(huì)調(diào)試代碼!
        三條:一行代碼簡(jiǎn)化Python異常信息:錯(cuò)誤清晰指出,排版簡(jiǎn)潔美觀!

        ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

        后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包

        來(lái)自公眾號(hào):Python大數(shù)據(jù)分析

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

        說(shuō)起Excel,那絕對(duì)是數(shù)據(jù)處理領(lǐng)域王者般的存在,盡管已經(jīng)誕生三十多年了,現(xiàn)在全球仍有7.5億忠實(shí)用戶,而作為網(wǎng)紅語(yǔ)言的Python,也僅僅只有700萬(wàn)的開(kāi)發(fā)人員。

        Excel是全世界最流行的編程語(yǔ)言。對(duì),你沒(méi)看錯(cuò),自從微軟引入了LAMBDA定義函數(shù)后,Excel已經(jīng)可以實(shí)現(xiàn)編程語(yǔ)言的算法,因此它是具備圖靈完備性的,和JavaScript、Java、Python一樣。

        雖然Excel對(duì)小規(guī)模數(shù)據(jù)場(chǎng)景來(lái)說(shuō)是剛需利器,但它面對(duì)大數(shù)據(jù)時(shí)就會(huì)有些力不從心。

        我們知道一張Excel表最多能顯示1048576行和16384列,處理一張幾十萬(wàn)行的表可能就會(huì)有些卡頓,當(dāng)然你可以使用VBA進(jìn)行數(shù)據(jù)處理,也可以使用Python來(lái)操作Excel。

        這就是本文要講到的主題,Python的第三方庫(kù)-xlwings,它作為Python和Excel的交互工具,讓你可以輕松地通過(guò)VBA來(lái)調(diào)用Python腳本,實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)分析。

        比如說(shuō)自動(dòng)導(dǎo)入數(shù)據(jù):

        或者隨機(jī)匹配文本:

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

        VBA作為Excel內(nèi)置的宏語(yǔ)言,幾乎可以做任何事情,包括自動(dòng)化、數(shù)據(jù)處理、分析建模等等,那為什么要用Python來(lái)集成Excel VBA呢?主要有以下三點(diǎn)理由:


          1. 如果你對(duì)VBA不算精通,你可以直接使用Python編寫(xiě)分析函數(shù)用于Excel運(yùn)算,而無(wú)需使用VBA;

          1. Python相比VBA運(yùn)行速度更快,且代碼編寫(xiě)更簡(jiǎn)潔靈活;

          1. Python中有眾多優(yōu)秀的第三方庫(kù),隨用隨取,可以節(jié)省大量代碼時(shí)間;

        對(duì)于Python愛(ài)好者來(lái)說(shuō),pandas、numpy等數(shù)據(jù)科學(xué)庫(kù)用起來(lái)可能已經(jīng)非常熟悉,如果能將它們用于Excel數(shù)據(jù)分析中,那將是如虎添翼。

        二、為什么使用xlwings?

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

        但相比其他庫(kù),xlwings性能綜合來(lái)看幾乎是最優(yōu)秀的,而且xlwings可以實(shí)現(xiàn)通過(guò)Excel宏調(diào)用Python代碼。

        圖片來(lái)自早起Python

        xlwings的入門(mén)使用這里不多做講解,如果大家還不了解,先看看我之前寫(xiě)的入門(mén)介紹:xlwings,讓excel飛起來(lái)!

        安裝xlwings非常簡(jiǎn)單,在命令行通過(guò)pip實(shí)現(xiàn)快速安裝:

        pip?install?python

        安裝好xlwings后,接下來(lái)需要安裝xlwings的 Excel集成插件,安裝之前需要關(guān)閉所有 Excel 應(yīng)用,不然會(huì)報(bào)錯(cuò)。

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

        xlwings?addin?install

        出現(xiàn)下面提示代表集成插件安裝成功。

        xlwings和插件都安裝好后,這時(shí)候打開(kāi)Excel,會(huì)發(fā)現(xiàn)工具欄出現(xiàn)一個(gè)xlwings的菜單框,代表xlwings插件安裝成功,它起到一個(gè)橋梁的作用,為VBA調(diào)用Python腳本牽線搭橋。

        另外,如果你的菜單欄還沒(méi)有顯示“開(kāi)發(fā)工具”,那需要把“開(kāi)發(fā)工具”添加到功能區(qū),因?yàn)槲覀円玫胶辍?/p>

        步驟很簡(jiǎn)單:

        1、在"文件"選項(xiàng)卡上,轉(zhuǎn)到"自定義>選項(xiàng)"。

        2、在“自定義功能區(qū)”和“主選項(xiàng)卡”下,選中“開(kāi)發(fā)工具”復(fù)選框。

        菜單欄顯示開(kāi)發(fā)工具,就可以開(kāi)始使用宏。

        如果你還不知道什么是宏,可以暫且把它理解成實(shí)現(xiàn)自動(dòng)化及批量處理的工具。

        到這一步,前期的準(zhǔn)備工作就完成了,接下來(lái)就是實(shí)戰(zhàn)!

        三、玩轉(zhuǎn)xlwings

        要想在excel中調(diào)用python腳本,需要寫(xiě)VBA程序來(lái)實(shí)現(xiàn),但對(duì)于不懂VBA的小伙伴來(lái)說(shuō)就是個(gè)麻煩事。

        但xlwings解決了這個(gè)問(wèn)題,不需要你寫(xiě)VBA代碼就能直接在excel中調(diào)用python腳本,并將結(jié)果輸出到excel表中。

        xlwings會(huì)幫助你創(chuàng)建.xlsm.py兩個(gè)文件,在.py文件里寫(xiě)python代碼,在.xlsm文件里點(diǎn)擊執(zhí)行,就完成了excel與python的交互。

        怎么創(chuàng)建這兩個(gè)文件呢?非常簡(jiǎn)單,直接在命令行輸入以下代碼即可:

        xlwings?quickstart?ProjectName

        這里的ProjectName可以自定義,是創(chuàng)建后文件的名字。

        如果你想把文件創(chuàng)建到指定文件夾里,需要提前將命令行導(dǎo)航到指定目錄。

        創(chuàng)建好后,在指定文件夾里會(huì)出現(xiàn)兩個(gè)文件,就是之前說(shuō)的.xlsm.py文件。

        我們打開(kāi).xlsm文件,這是一個(gè)excel宏文件,xlwings已經(jīng)提前幫你寫(xiě)好了調(diào)用Python的VBA代碼。

        按快捷鍵Alt + F11,就能調(diào)出VBA編輯器。

        Sub SampleCall()    mymodule = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))    RunPython "import " & mymodule & ";" & mymodule & ".main()"End Sub

        里面這串代碼主要執(zhí)行兩個(gè)步驟:

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

        2、調(diào)用.py腳本里的main()函數(shù)

        我們先來(lái)看一個(gè)簡(jiǎn)單的例子,自動(dòng)在excel表里輸入['a','b','c','d','e']

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

        import?xlwings?as?xw
        import?pandas?as?pd


        def?main():
        ????wb?=?xw.Book.caller()
        ????values?=?['a','b','c','d','e']
        ????wb.sheets[0].range('A1').value?=?values


        @xw.func
        def?hello(name):
        ????return?f"Hello?{name}!"


        if?__name__?==?"__main__":
        ????xw.Book("PythonExcelTest.xlsm").set_mock_caller()
        ????main()

        然后在.xlsm文件sheet1中創(chuàng)建一個(gè)按鈕,并設(shè)置默認(rèn)的宏,變成一個(gè)觸發(fā)按鈕。

        設(shè)置好觸發(fā)按鈕后,我們直接點(diǎn)擊它,就會(huì)發(fā)現(xiàn)第一行出現(xiàn)了['a','b','c','d','e']。

        同樣的,我們可以把鳶尾花數(shù)據(jù)集自動(dòng)導(dǎo)入到excel中,只需要在.py文件里改動(dòng)代碼即可,代碼如下:

        import?xlwings?as?xw
        import?pandas?as?pd

        def?main():
        ????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
        def?hello(name):
        ????return?f"Hello?{name}!"


        if?__name__?==?"__main__":
        ????xw.Book("PythonExcelTest.xlsm").set_mock_caller()
        ????main()

        好了,這就是在excel中調(diào)用Python腳本的全過(guò)程,你可以試試其他有趣的玩法,比如實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法、文本清洗、數(shù)據(jù)匹配、自動(dòng)化報(bào)告等等。

        Excel+Python,簡(jiǎn)直法力無(wú)邊。

        參考medium文章


        推薦閱讀

        1. Python 文本終端 GUI 框架,太酷了

        2. 5個(gè)方便好用的Python自動(dòng)化腳本

        3. 利用Conda嘗鮮Python 3.10


        您看此文用???分??秒,轉(zhuǎn)發(fā)只需1秒哦~

        瀏覽 38
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            少妇的下面又紧又湿 | 欧美久久网 | 日本护士毛片视频免费观看 | 大鸡巴搞逼 | 成人国产精品在线看 | 北条麻妃国产九九九 | 成人A级网站 | 欧美性猛交xxxx乱大交俱乐部 | 嬷嬷刷花蒂哭喊h调教公主视频 | 久ar热免费视频 激情视频网 |