以前,Excel和Python Jupyter Notebook之間我們只能選擇一個。 但是現在隨著PyXLL-Jupyter軟體包的推出,可以將兩者一起使用。
在本文中,我將向你展示如何設定在Excel中執行的Jupyter Notebook。 在這兩者之間共享資料,甚至可以從Excel工作簿呼叫Jupyter筆記本中編寫的Python函式!
開始首先,要在Excel中執行Python程式碼,你需要使用PyXLL包。 PyXLL使我們可以將Python整合到Excel中,並使用Python代替VBA。 要安裝PyXLL Excel載入項" pip install pyxll",然後使用PyXLL命令列工具安裝Excel的載入項:
>> pip install pyxll >> pyxll install
安裝完PyXLL Excel外掛,下一步就是安裝PyXLL -jupyter軟體包。該軟體包提供了PyXLL和Jupyter之間的連結,因此我們可以在Excel內使用Jupyter筆記本。
使用pip安裝pyxll-jupyter包:
如何使用現在,你已經在Excel中運行了完整的Jupyter筆記本! 但是,這有什麼好處呢? 這比在Excel外部執行筆記本更好?
好了,現在你可以使用Excel處理資料,並使用Python處理相同的資料。 將Excel用作用於組織和視覺化資料的互動式操作,無縫切換到Python以使用更復雜的功能。
將Jupyter筆記本用作草稿板,以試用Python程式碼。在Jupyter筆記本上完全用Python編寫Excel函式,並進行實時測試。開發完一個有用的可重用函式後,將其新增到PyXLL Python專案中。這樣你每次使用Excel時都可以使用相同的函式。
在本文的其餘部分,我將向你展示如何:
· 使用Jupyter筆記本在Excel和Python之間共享資料
· 在筆記本上寫Excel工作表函式(udf)
· 指令碼Excel與Python代替VBA
從Excel獲取資料到Python因為PyXLL在與Excel相同的程序中執行Python,所以用Python訪問Excel資料以及在Python和Excel之間快速呼叫。
為了使事情儘可能簡單,pyxll-jupyter包附帶了一些IPython"魔法"函式,可以在你的Jupyter筆記本中使用。
% xl_get
excel sheet 與 Pandas DataFrames 同步
使用魔術函式"%xlget"來獲取Python中當前的Excel選擇。 在Excel中建立資料表, 選擇左上角(或整個範圍),然後在Jupyter筆記本中輸入"%xlget",瞧! Excel表現在是pandas DataFrame。
%xl_get魔術函式有幾個選項:
-c或--cell。 傳遞單元格的地址以獲取值,例如%xl_get --cell A1:D5。 -t或--type。 指定獲取值時要使用的資料型別,例如%xl_get --type numpy_array。 -x或--no-auto-resize。 僅獲取選定範圍或給定範圍的資料。 不要擴充套件到包括周圍的資料範圍。
PyXLL還有其他與Excel互動以將資料讀入Python的方式。 "%xl_get"魔術功能只是使事情變得更簡單! 當Jupyter筆記本在Excel中執行時,所有其他方法(例如,使用XLCell類,Excel的COM API甚至xlwings)仍然可用。
提示:可以為魔術函式的結果分配一個變數! 例如,嘗試" df =%xl_get"。
將Python中的資料移回Excel從Python到Excel的另一種傳輸方式也可以正常工作。 無論你是使用Python載入資料集並將其傳輸到Excel工作簿,還是透過Excel處理資料集並希望將結果返回Excel,從Python複製資料到Excel都很容易。
%xl_set
魔術函式"%xlset"獲取一個Python物件並將其寫入Excel。在Excel中是否有想要的資料框" df"?只需使用"%xlset df",它將被寫入Excel中的當前選擇。
與%xlget一樣,%xlset也具有一系列選項來控制其行為。你甚至可以使用PyXLL的單元格格式設定功能在將結果寫入Excel的同時自動應用格式設定。
-c或--cell。將值寫入的單元格地址,例如%xl_set VALUE --cell A1。-t或--type。將值寫入Excel時要使用的資料型別說明符,例如%xl_set VALUE --type dataframe <index = False>。-f或--formatter。 PyXLL單元格格式化程式物件,例如%xl_set VALUE --formatter DataFrameFormatter()。請參閱單元格格式。-x或--no-auto-resize。不要自動調整範圍大小以適合資料。僅將值寫入當前選擇或指定範圍。
與%xlget一樣,%xlset只是一個快捷方式,你可能已與PyXLL一起使用的所有其他寫回Excel的方式仍然可以在Jupyter筆記本中使用。
在Excel中使用Python圖(matplotlib / plotly等)關於資料處理的一大優點是可用的功能強大的繪圖程式包。 例如df.plot()
PyXLL集成了所有主要的繪相簿,因此你也可以在Excel中充分利用它們。 這包括matplotlib(由pandas使用),plotly,bokeh和altair。
%xl_plot
使用"%xlplot"在Excel中繪製任何Python圖表。 從一個受支援的繪相簿中向其傳遞任何圖形物件,或使用最後一個pyplot圖形。 使用pandas plot的效果也很好,例如。 %xlplot df.plot(kind='scatter').
%xl_plot魔術函式具有一些選項來控制其工作方式:
-n或--name。 Excel中圖片物件的名稱。 如果使用已經存在的圖片名稱,則該圖片將被替換。 -c或--cell。 用作新圖片位置的單元格地址。 如果圖片已經存在,則無效。 -w或--width。 Excel中圖片的寬度(以磅為單位)。 如果更新現有圖片,則無效。 -h或--height。 Excel中圖片的高度(以磅為單位)。 如果更新現有圖片,則無效。
%xl_plot是pyxll.plot函式的快捷方式。
從Excel呼叫Python函式你可以直接從Excel工作簿中呼叫Python函式,而不是在Excel和Jupyter之間不斷移動資料然後執行一些Python程式碼
PyXLL的主要用例之一是用Python編寫自定義Excel工作表函式(或" UDF")。 這用於在使用Python函式構建的Excel中構建模型,這些函式當然可以使用其他Python庫(例如pandas和scipy)。
你也可以在Jupyter筆記本中編寫Excel工作表函式。 這是在不離開Excel即可使用Python IDE的情況下嘗試想法的絕佳方法。
自己試試吧。 編寫一個簡單的函式,然後將" pyxll.xl_func"修飾符新增到你的函式中:
from pyxll import xl_func@xl_funcdef test_func(a, b, c): # This function can be called from Excel! return (a * b) + c
輸入程式碼並在Jupyter中執行單元格後,即可立即從Excel工作簿中呼叫Python函式。
不只是簡單的功能。 你可以將整個資料範圍作為pandas DataFrames傳遞給函式,並返回任何Python型別,包括numpy陣列和DataFrames! 你可以透過給@xl_func裝飾器一個引數字串來告訴PyXLL期望什麼型別。
例如,嘗試以下方法:
from pyxll import xl_func# The "signature" tells PyXLL how to convert the arguments# and returned value.@xl_func("dataframe df: dataframe<index=True>", auto_resize=True)def df_describe(df): # 'df' is a pandas DataFrame built from the range passed # to this function. desc = df.describe() # 'desc' is a new DataFrame, which PyXLL will convert to # a range of values when returning to Excel. return desc
現在,你可以編寫複雜的Python函式來進行資料轉換和分析,Excel中如何呼叫或排序這些函式。 更改輸入會導致呼叫函式,並且計算出的輸出會實時更新,這與你期望的一樣!
在Excel中使用Python而不是VBA的指令碼你是否知道在VBA中可以執行的所有操作也可以在Python中完成?編寫VBA時將使用Excel物件模型,但是Python也提供相同的API。
在Excel中執行的Jupyter筆記本中,可以使用整個Excel物件模型,因此你可以使用與Excel VBA編輯器中完全相同的方式編寫Excel指令碼。
由於PyXLL在Excel程序內執行Python,因此從Python呼叫Excel不會對效能造成任何影響。也可以從外部Python程序呼叫Excel,但這通常要慢得多。在Excel中執行Jupyter筆記本也使一切變得更加便捷!
使用PyXLL的xl_app函式獲取" Excel.Application"物件,該物件等效於VBA中的Application物件。嘗試進行諸如獲取當前選擇和更改單元格內部顏色之類的操作。弄清楚如何使用Excel物件模型進行操作的一種好方法是記錄VBA宏,然後將該宏轉換為Python! PyXLL文件頁面Python作為VBA的替代品提供了一些有關如何做到這一點的技巧。
總結Python是VBA的強大替代品。 使用PyXLL,你可以完全用Python編寫功能齊全的Excel載入項。 Excel是一種出色的互動式計算工具。 新增Python和Jupyter將Excel提升到一個全新的水平。
使用Jupyter筆記本編寫的程式碼可以輕鬆地重構為獨立的Python包,以建立Excel工具包來為直觀的工作簿和儀表板提供動力。 任何Excel使用者都將能夠利用使用PyXLL編寫的Python工具,而無需任何Python知識。
最後 PyXLL的官網地址:www.pyxll.com
-
1 #大家這軟體也太貴了每個月就要200,有點嚇人