『硬核操作』Excel中使用Python,辦公的福音來了
大家好,我是曾子
經常給大家推薦好用的資料分析工具,也收到了鐵子們的各種好評。這次也不例外,我要再推薦一個,而且是個爆款神器。
Excel
和
Jupyter Notebok
都是我每天必用的工具,而且兩個工具經常協同工作,一直以來工作效率也還算不錯。但說實在,畢竟是兩個工具,使用的時候肯定會有一些切換的成本。
最近,在逛GitHub突然發現了一款神器「PyXLL-Jupyter」,它可以完美將
Jupyter Notebook
嵌入到Excel中!是的,你沒聽錯,使用它我們就可在
Excel
中執行
Jupyter Notebook
,呼叫Python函式,實現資料共享。
一、安裝
首先,想要在Excel中執行Python程式碼,需要安裝
PyXLL
外掛。
PyXLL
可以將Python整合到Excel中,用
Python
替代
VBA
。
先用 pip 安裝
PyXLL
。
pip install pyxll
然後再用
PyXLL
獨特的命令列工具安裝Excel外掛。
>> pyxll install
安裝好了
PyXLL
在 Excel中的外掛,下一步就是安裝
pyxll-jupyter
軟體包了。使用pip安裝
pyxll-jupyter
軟體包:
pip install pyxll-jupyter
安裝完畢後,啟動Excel,將在
PyXLL
選項卡中看到一個新的
Jupyter
按鈕。
單擊此按鈕可在Excel工作簿的側面板中開啟Jupyter Notebook。該面板是Excel介面的一部分,可以透過拖放操作取消停靠或停靠在其他位置。
在Jupyter面板中,你可以選擇一個現有的Notebook或建立一個新的Notebook。建立一個新的Notebook,選擇新建按鈕,然後選擇
Python 3
。
二、使用方法
這樣做有什麼用處呢?
1、Excel和Python共享資料
比如,我們要將資料從Excel匯入Python。
由於Excel和Python已經在同一程序中運行了,所以在Python中訪問Excel資料以及在Python和Excel之間切換非常快。
更牛X的是,
pyxll-jupyter
還單獨附帶了一些
IPython
魔法函式,輸入後一鍵即可完成同步。
%xl_get
將Python中的資料移到Excel,也是同理,非常簡單。
無論是使用Python先載入資料集,再傳輸到Excel,還是其它形式,從Python複製資料到Excel非常容易。
%xl_set
當然,
%xl_get
和
%xl_set
都附帶引數選項可以自定義匯入匯出規則。
2。 在Excel中使用Python繪圖
PyXLL
的另一大用處就是它集成了幾乎所有主流的視覺化包,因此我們可以在Excel中利用這些視覺化包隨意繪圖,包括
matplotlib
、
plotly
、
bokeh
和
altair
等。
%xl_plot
同樣,使用魔法函式
%xl_plot
在Excel中可以繪製任何的Python圖。任何一個受支援的視覺化包也可進行繪圖然後傳遞圖形物件到Excel中,比如上圖中使用pandas的繪圖效果就很好。
%xl_plot df。plot(kind=
‘scatter’
)
3。 從Excel呼叫Python函式
使用Excel離不開函式,而當我們需要一些複雜功能時,自帶函式未必能滿足我們的需求。
透過
PyXLL
,我們可以直接在
Excel
中呼叫
Python
函式,並對其進行實時測試。這就避免了Excel和Jupyter之間的來回切換成本,有點像dataframe的
apply
用法,寫個函式直接與
Excel
完美融合。
函式寫好後,還可將其新增到
PyXLL Python
專案中。這樣以後每次都可以複用實現相同功能,簡直不要太香!
from
pyxll
import
xl_func
@xl_func
def
test_func
(a, b, c)
:
return
(a * b) + c
比如,輸入以上程式碼在
Jupyter
中執行後,Python函式將立即可被Excel工作簿呼叫。
不只是簡單的函式,還可以將整個資料作為
pandas
的
DataFrames
傳給函式,並返回任何的Python型別,比如
numpy array
、
DataFrames
,甚至還可以透過給
@xl_func
裝飾器一個簽名字串來告訴PyXLL輸出什麼型別。例如,以下函式:
from pyxll import xl_func
# 裝飾器簽名告訴 PyXLL 如何轉換函式引數和返回的值
@xl_func(
“dataframe df: dataframe
, auto_resize=True)
def df_describe(df):
# df 是一個從資料集裡建立的 pandas DataFrame 傳遞給函式
desc = df。describe()
# desc 是新的 DataFrame(PyXLL轉換為一組值並返回給Excel所建立的)
return
desc
現在可以編寫複雜的Python函式來進行資料轉換和分析,但是可以協調在Excel中如何呼叫或排序這些函式。更改輸入會導致呼叫函式,並且計算出的輸出會實時更新,這與我們期望的一樣。
4。 替代VBA
VBA指令碼所需的功能函式,在Python中均有相同的API。這對於熟悉Python但不熟悉VBA的同學絕對是個好訊息。
官網還給出了和VBA功能一樣的API說明文件。
https://www。pyxll。com/docs/userguide/vba。html
Jupyter Notebook
在Excel中執行,整個Excel物件都可用,所有操作就像在
VBA
編輯器中編寫
Excel
指令碼一模一樣。
由於
PyXLL
在Excel程序內執行Python ,因此從Python呼叫Excel不會對效能造成任何影響。當然,也可以從外部Python程序呼叫Excel,但這通常要慢很多。在Excel中執行
Jupyter Notebook
,一切變得就不一樣了!
使用
PyXLL
的
xl_app
函式獲取
Excel。Application
物件,該物件等效於
VBA
中的
Application
物件。弄清楚如何使用Excel物件模型進行操作的一種好方法是記錄
VBA
宏,然後將該宏轉換為
Python
。
下圖中嘗試將當前選擇單元格更改顏色。
三、總結
PyXLL
將完美融合
Python
和
Excel
,實現了以下功能,為表格資料處理提升一個全新的高度。
Excel和Python共享資料
在Excel中使用Python繪圖
從Excel呼叫Python函式
替代VBA指令碼
不得不說這個工具是真的香,喜愛Python的同學可以不用學習VBA了,Python指令碼打天下。
有想要原始碼的可以和小編探討探討哦!
相關文章
- 2021-09-07在這個暑假,悄悄學習Python,然後驚豔所有人!
- 2021-05-18楊冪、娜扎、餘景天、張彬彬、鹿晗、景甜、王一博、陳偉霆、周也
- 2021-05-15人生苦短,想學python嗎?《Python程式設計:從入門到實踐》福利分享
- 2021-05-09平民也能開得“黑武士”,2.0T還不到16萬,它不香嗎?
- 2021-03-31認識Office辦公軟體