Jupyter Notebooks嵌入Excel並使用Python替代VBA宏

2021-01-10 網易


  以前,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.

相關焦點

  • Jupyter/IPython筆記本集合 !(附大量資源連結)-上篇
    數據科學筆記本https://github.com/donnemartin/data-science-ipython-notebooks/blob/master/README.mdETL with Python,ETL(Extract,Transfer和Load)教程,使用python petl包,加載到MySQL
  • 入門|始於Jupyter Notebooks:一份全面的初學者實用指南
    你可以使用以下代碼升級到最新版的 pip:#Linux and OSXpip install -U pip setuptools#Windowspython -m pip install -U pip setuptoolspip 安裝好之後,繼續安裝 Jupyter:#For Python2pip install jupyter#For Python3pip3
  • 用excel製作文件管理器,所有版本皆可使用
    Hello,大家好,之前跟大家分享了使用excel中的power query功能製作一個文件管理器,但是很多分析反應自己的excel版本不夠高,無法使用,今天就跟大家分享如何使用宏表函數製作文件管理器,他也是可以實現文件刷新的,這個的操作也不難,下面就讓我們來看下他是如何設置的一、什麼是宏表函數以及FILES函數宏表函數是早期低版本excel的產物
  • excel宏:Excel表格中的宏怎麼使用
    今天來聊聊一篇關於excel宏:Excel表格中的宏怎麼使用的文章,現在就為大家來簡單介紹下excel宏:Excel表格中的宏怎麼使用,希望對各位小夥伴們有所幫助。
  • 宏如何使用?--excel的學習
    如果你已經用excel很長時間了,那麼您一定聽過宏這個名稱,很多人都不知道宏是用來幹什麼的,今天我們就來了解一下excel中宏的作用與幫助,如果您經常在excel中重複一個任務,那就可以用宏來自動執行該任務了。
  • Jupyter Notebooks三大附加功能,好用到飛起!
    若要獲得此功能,請在終端窗口安裝帶有此命令的jupyter_contrib_nbex軟體包:conda install -c conda-forge jupyter_contrib_nbextensions一旦安裝了該軟體包,可使用以下方法啟動Jupyter Notebooks:Jupyter Notebooks進入Jupyter
  • 15個應該掌握的Jupyter Notebook 使用技巧
    計算單元的執行時間我們可以在一個jupyter notebook單元的開頭使用%%time命令來計算執行該單元的時間。2. 進度條可以使用python外部庫創建進度條,它可以實時更新代碼運行的進度。它讓用戶知道正在運行的代碼腳本的狀態。你可以在這裡獲得相關的庫Github庫。
  • 不吹不黑,Jupyter Lab 3.0客觀使用體驗
    圖1那麼目前的jupyter lab好用嗎?是否還存在bug?適合直接升級使用嗎?今天的文章就將通過我的真實使用體驗,來認識jupyter lab3.0。2 jupyter lab 3.0使用體驗為了不幹擾現有的環境,我們通過以下代碼創建新的環境,並安裝最新穩定版本的jupyter lab:conda create -n temp python=3.7 -yconda activate temppip install jupyterlab -U 這樣我們的
  • python教程第三課:python IDE之jupyter notebook詳細教程講解
    這次我們先來講一下如何使用Notebook進行python的代碼編寫1、 首先我們在系統安裝裡面找到Anaconda,裡面有一項Jupyter Notebook,點擊它以後將打開下面的界面, 這個界面看網址就知道,是在本地啟動打開的一個頁面,那麼除了可以從anaconda裡面打開,也可以在CMD窗口裡面輸入jupyter notebook
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    因篇幅有限,以下展示的只是課程裡部分內容如對python課程有更多疑問 請諮詢客服 1零基礎入門全能班 01 –python簡介 02 第一個程序 03-python執行方式和pycharm設置 04-程序的注釋和算術運算符 05 程序執行原理 06變量的使用以及類型 07
  • Python利用openpyxl處理excel文件(openpyxl的安裝及簡介)
    但是試想,如果把上述excel公式變成諸如python中的if-else結構,其可讀性肯定是不容置疑的……今天,我們來介紹一款excel處理利器—openpyxl(python庫文件)。根據openpyxl官方文檔,結合個人近年來使用心得,總結openpyxl應用中以下幾個知識點:(一)openpyxl的安裝、導入及相關注意事項;(二)對excel文件的打開、讀寫、編輯、保存相關;(三)對excel文件中樣式的編輯;(四)對excel文件中單元格及行列的操作;(五)在excel文件中公式及圖表的簡單操作
  • 工作中為什麼有必要學點VBA
    從office97開始,VBA作為MS的標準內置配置,彌補了excel內在的基本函數不足以支持的複雜計算,提供了一種相對輕量級的、所見即所得的解決方案,濤哥在21世紀初因內部工作需要(統計代碼行數記工作量)第一次接觸了VBA,並在以後的工作中多次出色的完成相關任務,甚至給濤嫂編的幾個小程序大大提升了她們的工作效率,還受到了時任行長的讚許,現在想來還歷歷在目。
  • excel小技巧:利用宏製作工資條,只需要簡單的三步
    今天跟大家分享的是使用vba基礎從錄製宏開始製作工資/成績條:1、錄製前先選中A1單元格,即工資條標題行所在的最左上角單元格點擊【開發工具】——「使用相對引用」——錄製宏——輸入一個名字——定義宏的快捷鍵複製標題行後,選中A4單元格(最左邊),點擊滑鼠右鍵【插入複製的單元格】,將滑鼠放在第二個標題行的左上角,點擊停止錄製2、單步執行代碼刪掉剛才複製的標題
  • Excel表數據改變,每天的排名變化,錄製宏自動排序
    我們在工作中,經常會統計員工的完成數據,來督促員工達成每月的任務目標,如下所示是公司統計的員工任務完成情況:其中E列是用RANK函數根據完成率自動進行的排名,在E2使用的公式是:=RANK(D2,D:D)為了讓名次呈現的更直觀,我們通常會對數據進行排序操作
  • 如何優化Jupyter? - CDA數據分析師
    pip install jupyterthemes我們可以運行以下命令來列出所有可用主題的名稱:!在此示例中,使用 nbextensions 庫來安裝所有必需的小部件(在這裡,建議首先通過終端安裝軟體包,然後打開Jupyter筆記本)。nbextensions庫利用不同的Javascript模型來豐富Jupyter筆記本的前端。!pip安裝jupyter_contrib_nbextensions!
  • 入門Python,這些JupyterNotebook技巧就是你必須學的
    此系列文章收錄在公眾號(建議按順序閱讀本系列文章) : 數據大宇宙 > Python > 工具轉發本文並私信我"python",即可獲得Python資料以及更多系列文章(持續更新的)Python數據人你竟然不會用JupyterNotebook!
  • 解決宏灰色、無法使用
    一、WPS表格宏灰色、無法使用宏的解決及設置方法 (如宏可以使用此步驟可忽略)插件地址,方便大家下載,連結:https://pan.baidu.com/s/1c3J05wc 密碼:jpyj雙擊打開名稱為「vba6chs.msi」的文件,就開始安裝。
  • Excel宏怎麼使用
    Excel宏怎麼使用  辦公軟體需要用到的地方非常多,很多朋友也都在用。當然,有不少人不知道怎麼使用Excel宏,雖然很簡單,但是沒接觸到的就無從下手了。下面就跟大家分享下Excel宏的使用方法。  使用Excel的VBA開發的Excel文檔,在Excel中運行時需要開啟Excel的宏功能,否則此文檔的VBA自動化功能將被完全屏蔽,文檔的功能無法實現。  因此,在打開這些Excel程序文件之前,您需要先對您的Excel宏安全性進行設置(設置永久有效,在同一臺電腦上無需再次設置)。