以前,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包:
>> pip install pyxll-jupyter
一旦安裝了PyXLL Excel加載項和PyXLL-Jupyter軟體包後,啟動Excel將在PyXLL選項卡中看到一個新的「 Jupyter」按鈕。
單擊此按鈕可在Excel工作簿的側面板中打開Jupyter筆記本。 該面板是Excel界面的一部分,可以通過拖放操作取消停靠或停靠在其他位置。
在Jupyter面板中,你可以選擇一個現有的筆記本或創建一個新的筆記本。 要創建一個新的筆記本,請選擇「新建」按鈕,然後選擇「 Python 3」。
現在,你已經在Excel中運行了完整的Jupyter筆記本! 但是,這有什麼好處呢? 這比在Excel外部運行筆記本更好?
好了,現在你可以使用Excel處理數據,並使用Python處理相同的數據。 將Excel用作用於組織和可視化數據的交互式操作,無縫切換到Python以使用更複雜的功能。
將Jupyter筆記本用作草稿板,以使用Python代碼。在Jupyter筆記本上完全用Python編寫Excel函數,並進行實時測試。開發完一個有用的可重用函數後,將其添加到PyXLL Python項目中。這樣你每次使用Excel時都可以使用相同的函數。
在本文的其餘部分,我將向你展示如何:
1. 使用Jupyter筆記本在Excel和Python之間共享數據
2. 在筆記本上寫Excel工作函數表(udf)
3. exc腳本el與Python代替VBA
因為PyXLL在與Excel相同的進程中運行Python,所以用Python訪問Excel數據以及在Python和Excel之間快速調用。
為了使事情儘可能簡單,pyxll-jupyter包附帶了一些IPython「魔法」函數,可以在你的Jupyter筆記本中使用。
% xl_get
excel sheet 與 Pandas DataFrames 同步
使用魔術函數「%xl_get」來獲取Python中當前的Excel選擇。 在Excel中創建數據表, 選擇左上角(或整個範圍),然後在Jupyter筆記本中輸入「%xl_get」,瞧! 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工作簿,還是通過Excel處理數據集並希望將結果返回Excel,從Python複製數據到Excel都很容易。
%xl_set
魔術函數「%xl_set」獲取一個Python對象並將其寫入Excel。在Excel中是否有想要的數據框「 df」?只需使用「%xl_set df」,它將被寫入Excel中的當前選擇。
與%xl_get一樣,%xl_set也具有一系列選項來控制其行為。你甚至可以使用PyXLL的單元格格式設置功能在將結果寫入Excel的同時自動應用格式設置。
-c或--cell。將值寫入的單元格地址,例如%xl_set VALUE --cell A1。
-t或--type。將值寫入Excel時要使用的數據類型說明符,例如%xl_set VALUE --type dataframe
-f或--formatter。 PyXLL單元格格式化程序對象,例如%xl_set VALUE --formatter DataFrameFormatter()。請參閱單元格格式。
-x或--no-auto-resize。不要自動調整範圍大小以適合數據。僅將值寫入當前選擇或指定範圍。
與%xl_get一樣,%xl_set只是一個快捷方式,你可能已與PyXLL一起使用的所有其他寫回Excel的方式仍然可以在Jupyter筆記本中使用。
在Excel中使用Python圖(matplotlib / plotly等)
關於數據處理的一大優點是可用的功能強大的繪圖程序包。 例如df.plot()
PyXLL集成了所有主要的繪圖庫,因此你也可以在Excel中充分利用它們。 這包括matplotlib(由pandas使用),plotly,bokeh和altair。
%xl_plot
使用「%xl_plot」在Excel中繪製任何Python圖表。 從一個受支持的繪圖庫中向其傳遞任何圖形對象,或使用最後一個pyplot圖形。 使用pandas plot的效果也很好,例如。 %xl_plot df.plot(kind='scatter').
%xl_plot魔術函數具有一些選項來控制其工作方式:
-n或--name。 Excel中圖片對象的名稱。 如果使用已經存在的圖片名稱,則該圖片將被替換。
-c或--cell。 用作新圖片位置的單元格地址。 如果圖片已經存在,則無效。
-w或--width。 Excel中圖片的寬度(以磅為單位)。 如果更新現有圖片,則無效。
-h或--height。 Excel中圖片的高度(以磅為單位)。 如果更新現有圖片,則無效。
%xl_plot是pyxll.plot函數的快捷方式。
你可以直接從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_func
def 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
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
", auto_resize=True)
現在,你可以編寫複雜的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知識。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.