什么編程語言可以與 Excel 結(jié)合?
一、python編程語言與 Excel 結(jié)合
python編程語言可以與 Excel 結(jié)合。Python相比VBA運(yùn)行速度更快,且代碼編寫更簡潔靈活;Python中有眾多優(yōu)異的第三方庫,隨用隨取,可以節(jié)省大量代碼時(shí)間;對于Python愛好者來說,pandas、numpy等數(shù)據(jù)科學(xué)庫能用于Excel數(shù)據(jù)分析中,那將是如虎添翼。
Python中有很多庫可以操作Excel,像xlsxwriter、openpyxl、pandas、xlwings等。
但相比其他庫,xlwings性能綜合來看幾乎是優(yōu)異秀的,而且xlwings可以實(shí)現(xiàn)通過Excel宏調(diào)用Python代碼。
安裝xlwings非常簡單,在命令行通過pip實(shí)現(xiàn)快速安裝:
pip install python
安裝好xlwings后,接下來需要安裝xlwings的 Excel集成插件,安裝之前需要關(guān)閉所有 Excel 應(yīng)用,不然會報(bào)錯(cuò)。
同樣在命令行輸入以下命令:
xlwings addin install
出現(xiàn)下面提示代表集成插件安裝成功。
xlwings和插件都安裝好后,這時(shí)候打開Excel,會發(fā)現(xiàn)工具欄出現(xiàn)一個(gè)xlwings的菜單框,代表xlwings插件安裝成功,它起到一個(gè)橋梁的作用,為VBA調(diào)用Python腳本牽線搭橋。
另外,如果你的菜單欄還沒有顯示“開發(fā)工具”,那需要把“開發(fā)工具”添加到功能區(qū),因?yàn)槲覀円玫胶辍?/p>
步驟很簡單:
1、在”文件”選項(xiàng)卡上,轉(zhuǎn)到”自定義>選項(xiàng)”。
2、在“自定義功能區(qū)”和“主選項(xiàng)卡”下,選中“開發(fā)工具”復(fù)選框。
菜單欄顯示開發(fā)工具,就可以開始使用宏。
如果你還不知道什么是宏,可以暫且把它理解成實(shí)現(xiàn)自動化及批量處理的工具。
到這一步,前期的準(zhǔn)備工作就完成了,接下來就是實(shí)戰(zhàn)!
玩轉(zhuǎn)xlwings
要想在excel中調(diào)用python腳本,需要寫VBA程序來實(shí)現(xiàn),但對于不懂VBA的小伙伴來說就是個(gè)麻煩事。
但xlwings解決了這個(gè)問題,不需要你寫VBA代碼就能直接在excel中調(diào)用python腳本,并將結(jié)果輸出到excel表中。
xlwings會幫助你創(chuàng)建.xlsm和.py兩個(gè)文件,在.py文件里寫python代碼,在.xlsm文件里點(diǎn)擊執(zhí)行,就完成了excel與python的交互。
怎么創(chuàng)建這兩個(gè)文件呢?非常簡單,直接在命令行輸入以下代碼即可:
xlwings quickstart ProjectName
這里的ProjectName可以自定義,是創(chuàng)建后文件的名字。
如果你想把文件創(chuàng)建到指定文件夾里,需要提前將命令行導(dǎo)航到指定目錄。
創(chuàng)建好后,在指定文件夾里會出現(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è)簡單的例子,自動在excel表里輸入[‘a(chǎn)’,’b’,’c’,’d’,’e’]
名列前茅步:我們把.py文件里的代碼改成以下形式。
import xlwings as xw
import pandas as pd
def main():
??? wb = xw.Book.caller()
??? values = [‘a(chǎn)’,’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)擊它,就會發(fā)現(xiàn)名列前茅行出現(xiàn)了[‘a(chǎn)’,’b’,’c’,’d’,’e’]。
動圖封面
同樣的,我們可以把鳶尾花數(shù)據(jù)集自動導(dǎo)入到excel中,只需要在.py文件里改動代碼即可,代碼如下:
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ù)匹配、自動化報(bào)告等等。
延伸閱讀:
二、Excelize
Excelize 是 Go 語言編寫的用于操作 Office Excel 文檔基礎(chǔ)庫,基于 ECMA-376,ISO/IEC 29500 國際標(biāo)準(zhǔn)。可以使用它來讀取、寫入由 Microsoft Excel 2007 及以上版本創(chuàng)建的電子表格文檔。支持 XLSX / XLSM / XLTM 等多種文檔格式,高度兼容帶有樣式、圖片(表)、透視表、切片器等復(fù)雜組件的文檔,并提供流式讀寫 API,用于處理包含大規(guī)模數(shù)據(jù)的工作簿
Excelize是國人編寫的基于Go語言的Excel庫,中文文檔相對來說更為齊全,同時(shí)Go語言是編譯型語言,編譯后只有1個(gè)運(yùn)行文件,可以方便的拷貝到其他電腦使用,同時(shí)不用安裝額外的運(yùn)行時(shí),Go語言還有一個(gè)優(yōu)勢就是,速度非常快。

相關(guān)推薦HOT
更多>>
到底哪些APP在用Flutter?
一、滴滴出行滴滴出行是一款出行服務(wù)平臺,提供打車、順風(fēng)車、單車等多種出行方式。在采用Flutter技術(shù)后,滴滴出行成功實(shí)現(xiàn)了Android和iOS平臺...詳情>>
2023-10-14 20:48:15
為什么不推薦使用try-with-finally處理Java異常?
一、不推薦使用try-with-finally處理Java異常的原因1、代碼冗余使用 try-with-finally 時(shí),需要在 finally 塊中編寫釋放資源的代碼,這可能導(dǎo)致...詳情>>
2023-10-14 20:26:43
Android WebView onPageFinished對于Document意味著什么?
一、Android WebView onPageFinished對于Document意味著什么Android WebView 中的 onPageFinished 是 WebViewClient 類的一詳情>>
2023-10-14 18:30:55
linkedlist為什么用雙向鏈表?
一、linkedlist用雙向鏈表的原因1、雙向遍歷雙向鏈表可以通過前向和后向指針在兩個(gè)方向上進(jìn)行遍歷。這使得在某些情況下,可以從鏈表的兩端同時(shí)...詳情>>
2023-10-14 15:23:23熱門推薦
粒度是什么意思?
沸快照與備份有什么區(qū)別?
熱為什么MySQL中很少見到使用視圖功能?
熱Notion Database中怎么能實(shí)現(xiàn)多級標(biāo)簽?
新Python底層是用什么語言實(shí)現(xiàn)的?
到底哪些APP在用Flutter?
為什么不推薦使用try-with-finally處理Java異常?
蘋果TF上架是什么意思?
Java并發(fā)編程需要掌握什么?
hash是什么?
Linux并發(fā)、競態(tài)、互斥鎖、自旋鎖、信號量都是什么?
在數(shù)據(jù)結(jié)構(gòu)樹的創(chuàng)建中為什么要傳遞一個(gè)雙指針數(shù)據(jù)?
Android WebView onPageFinished對于Document意味著什么?
ios軟件開發(fā)用什么工具?
技術(shù)干貨







快速通道 更多>>
-
課程介紹
點(diǎn)擊獲取大綱 -
就業(yè)前景
查看就業(yè)薪資 -
學(xué)習(xí)費(fèi)用
了解課程價(jià)格 -
優(yōu)惠活動
領(lǐng)取優(yōu)惠券 -
學(xué)習(xí)資源
領(lǐng)3000G教程 -
師資團(tuán)隊(duì)
了解師資團(tuán)隊(duì) -
實(shí)戰(zhàn)項(xiàng)目
獲取項(xiàng)目源碼 -
開班地區(qū)
查看來校路線