對(duì)于Python愛好者來說,pandas、Numpy等數(shù)據(jù)科學(xué)庫用起來可能已經(jīng)非常熟悉,如果能將它們用于Excel數(shù)據(jù)分析中,那將是如虎添翼。Python中有很多庫可以操作Excel,像xlsxwriter、openpyxl、pandas、xlwings等。但相比其他庫,xlwings性能綜合來看幾乎是最優(yōu)秀的,而且xlwings可以實(shí)現(xiàn)通過Excel宏調(diào)用Python代碼。xlwings的入門使用這里不多做講解。安裝xlwings非常簡(jiǎn)單,在命令行通過pip實(shí)現(xiàn)快速安裝:安裝好xlwings后,接下來需要安裝xlwings的 Excel集成插件,安裝之前需要關(guān)閉所有 Excel 應(yīng)用,不然會(huì)報(bào)錯(cuò)。xlwings和插件都安裝好后,這時(shí)候打開Excel,會(huì)發(fā)現(xiàn)工具欄出現(xiàn)一個(gè)xlwings的菜單框,代表xlwings插件安裝成功,它起到一個(gè)橋梁的作用,為VBA調(diào)用Python腳本牽線搭橋。另外,如果你的菜單欄還沒有顯示“開發(fā)工具”,那需要把“開發(fā)工具”添加到功能區(qū),因?yàn)槲覀円玫胶辍?/span>- 在"文件"選項(xiàng)卡上,轉(zhuǎn)到"自定義>選項(xiàng)"。
- 在“自定義功能區(qū)”和“主選項(xiàng)卡”下,選中“開發(fā)工具”復(fù)選框。
如果你還不知道什么是宏,可以暫且把它理解成實(shí)現(xiàn)自動(dòng)化及批量處理的工具。到這一步,前期的準(zhǔn)備工作就完成了,接下來就是實(shí)戰(zhàn)!要想在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
- 調(diào)用.py腳本里的main()函數(shù)
我們先來看一個(gè)簡(jiǎn)單的例子,自動(dòng)在excel表里輸入['a','b','c','d','e']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)直法力無邊。
延伸閱讀??

延伸閱讀《利用Python進(jìn)行數(shù)據(jù)分析》
在公眾號(hào)對(duì)話框輸入以下關(guān)鍵詞讀書 | 書單 | 干貨 | 講明白 | 神操作 | 手把手大數(shù)據(jù) | 云計(jì)算 | 數(shù)據(jù)庫 | Python | 爬蟲 | 可視化AI | 人工智能 | 機(jī)器學(xué)習(xí) | 深度學(xué)習(xí) | NLP5G | 中臺(tái) | 用戶畫像 | 數(shù)學(xué) | 算法 | 數(shù)字孿生據(jù)統(tǒng)計(jì),99%的大咖都關(guān)注了這個(gè)公眾號(hào)