自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

二、為什么使用xlwings?

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

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

圖片來自早起Python

xlwings的入門使用這里不多做講解。

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

pip install python

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

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

xlwings addin install

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

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

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

步驟很簡(jiǎn)單:

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

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

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

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

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

三、玩轉(zhuǎn)xlwings

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

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

xlwings會(huì)幫助你創(chuàng)建??.xlsm???和??.py???兩個(gè)文件,在??.py???文件里寫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è)文件,就是之前說的??.xlsm???和??.py??文件。

我們打開??.xlsm??文件,這是一個(gè)excel宏文件,xlwings已經(jīng)提前幫你寫好了調(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ù)

我們先來看一個(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腳本的全過程,你可以試試其他有趣的玩法,比如實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法、文本清洗、數(shù)據(jù)匹配、自動(dòng)化報(bào)告等等。

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

參考medium文章

責(zé)任編輯:龐桂玉 來源: 菜鳥學(xué)Python
相關(guān)推薦

2021-01-15 10:52:10

PythonVBAExcel

2020-11-23 16:18:21

Python開發(fā)工具

2024-05-23 11:33:42

python代碼開發(fā)

2025-01-21 15:20:14

2025-03-28 09:15:50

2024-12-30 08:33:54

大型模型GeminiLLM

2024-04-19 16:15:30

云計(jì)算

2025-02-05 10:02:03

Locust測(cè)試異常處理

2024-04-30 08:00:00

人工智能自動(dòng)化文件處理

2011-03-21 12:41:41

JavaScript

2020-03-18 09:23:24

Python數(shù)據(jù)SQL

2011-04-06 13:40:48

Delphi

2022-03-29 09:00:00

Angular框架REST API

2023-10-18 13:57:17

2023-02-15 08:21:22

2021-01-18 17:23:30

代碼調(diào)試VS Code

2025-03-04 02:00:00

Python編寫自動(dòng)化

2020-08-04 10:03:03

Python開發(fā)語言

2024-06-11 10:41:14

2023-12-25 09:26:51

監(jiān)控系統(tǒng)工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)