[python交互]Excel催化剂与python交互原理剖析,py开发者按此规范可自行扩展功能...
只需簡單地編寫小段py腳本,就可以借助Excel催化劑的平臺作用,將寫出的py腳本,嫁接到Excel的環境上使用,在Excel的廣闊用戶群體上帶來更多的產出價值。也大大增加了將自己的python技能輸出到普通用戶可享用的層面。
按照本文的規范,可以自行在本地Excel催化劑環境上擴展python功能,若覺得自己所寫的python腳本有足夠的共性,有推廣價值,可以加入Excel催化劑的python開發者社群,一起做大此領域。
以下的文字版內容,可能在后續的代碼變動下會略有更改,大體上不變,要獲取最新的信息,可私信筆者,加入Excel催化劑組建的python開發者社群,一起深入交流。
同步也錄制了視頻教程,地址為:https://www.bilibili.com/video/av87125312/,可在【閱讀原文】上跳轉到B站觀看。
一、前端用戶提供兩個區域表選擇,左為參數區域,右邊為數據區域。
二、用戶選擇后的結果,催化劑將生成一個字典數據結構給python調用。
下圖為用戶的選擇方式,用窗體來輔助選擇,其中描述的字段,如果取自數據表,描述部分的約定是寫幫忙文檔時告訴用戶這些日期、數量的參數的特征,*代表數據區域取數,是多的列表關系,這些都不需要python來處理,我插件層面處理好。
可能用戶的參數匹配和我們py程序的不一致,
缺少一些必填項(需要報錯返回提示用戶)
多一些無用項如:參數名稱,這個是標題行,可以忽略它
一些選填項用戶沒有輸入,py程序要自己用默認值去補充或處理選填為空的其他邏輯。
三、收到插件傳過來的參數,按py的程序需求,對傳入的參數再加工處理,最終使用Return返回數據給插件。
在python腳本中,約定的幾點規范需要遵守。
插件調用的python方法為run方法名
run方法名只有一個參數是kwargs,參數名不能修改。
參數返回的數據類型是字典結構,已在common公共模塊中寫了方法
此方法需傳入兩個參數,第1個參數是返回數據類型,字符為以下四種。
rng,對應的contents內容為:用pd的to_json(orient='split')方法返回最終字符串結果
msg,對應的contents內容為:返回一段給用戶提醒的文本即可,最終會以彈窗的信息讓用戶閱讀,長內容最好分多行表示。
html,對應的contents內容為:返回生成的html文件的全路徑
img,對應的contents內容為:返回生成的圖片文件的全路徑
具體使用可參照現有的示例文件,安裝好插件在配置文件里可找到。
common.py的文件,大家有什么好的通用方法可以抽象出來,不用重復輸入,當然不是必須,可以不引用里面方法寫自己的py腳本。
傳入的kwargs參數是字典結構,比較好的數據處理方式是直接轉成dataFrame數據類型。
四、注意事項
用戶輸入為空時傳入的kwargs參數變化
如下圖所示,用戶界面輸入為空,對接收到的kwargs參數影響。
需要在插件上調試時,可以加上調試方法體
因插件開啟的python進展,會一直以ipython的交互方式存在,如果py腳本文件有修改,此時會有緩存作用,不會再次調用更改后的py文件內容。
若需要修改后的py文件立即生效,插件再次調用時可識別出來,可在py文件中,加入以下標識,測試好后再注釋刪除它。
def _debug_():passcommon公共模塊的調用,對應的import 位置是python文件夾的位置,而不是和py腳本文件同目錄
py腳本文件夾和文件名的規范
因插件最終調用py文件時,將文件夾和文件名當作模塊來調用,最終找到要調用的方法,所以文件夾、文件名,需遵循變量的命名規范,不能以數字開頭,不能有【】之類的特殊符號等。
可以在自己生成的結果數據中插入一些個人宣傳信息
如在html文件中,插入一些文字和二維碼等,我在common模塊上寫了個方法,大家可以自己在py腳本上硬編碼的方式寫上也可以。
def replace_html_withAD(html_path,title,ad_file_path):if os.path.exists(ad_file_path):with open(ad_file_path,'r',encoding='utf-8') as ad:ad_contents = ad.read()with open(html_path, 'r', encoding='utf-8') as src_file:html_contents = src_file.read()html_contents = html_contents.replace('https://assets.pyecharts.org/assets/', '')html_contents = html_contents.replace('<title>Awesome-pyecharts</title>', '<title>{0}</title>'.format(title))html_contents = html_contents.replace('</body>', ad_contents+'</body>')with open(html_path, 'w', encoding='utf-8') as dst_file: ?dst_file.write(html_contents)如果需要直接或間接調用matplotlib庫來繪圖的腳本,請建一個文件夾【單次執行】存放
因為插件開啟python后,以ipython交互式的方式調用,只在首次調用時加載python會慢一些,后續再調調用時會很快。
但因為matplotlib作圖的原理,在交互模式下,會彈出窗口,使程序一直會卡住不動,后續執行時,前端插件界面就會卡死沒反應,請務必測試好,若存在調用matplotlib而讓插件前端卡死的,記得需要放到【單次執行】文件夾里,插件識別這個關鍵字,執行完這個腳本就退出python程序,再執行下一個腳本任務時可以正常。
類似pandas_profiling這樣的包,可能底層作圖也是matplotlib,同樣會有問題,seaborn就更不用說了。
傳入py腳本中的kwargs參數,小心處理數據類型
在Excel界面上的數據類型經過.NET程序處理,去到python里使用時,可能會有差異,特別是數字、日期這類的信息。
可以使用插件的界面操作,在py文件中觀察傳入的數據情況,如下圖:
py文件中,記得使用debug方法標識,讓py文件修改后,插件可以再次加載,測試無誤后可以注釋或刪除它。
在主方法run的任意位置,都可以用返回【msg】彈窗信息的方法,局部測試腳本的運行情況。
如下圖直接測試kwargs參數的內容(記得先轉成字符串類型才讓其輸出)。
如下圖中,插件會以彈窗的形式響應輸出結果,發現在參數區域里的數字類型,傳到py里后,變成字符串格式,而數據區域中的不受影響,同時日期格式變為ISO的字符串日期格式。
才上數據類型對不上的原因已找到bug進行修復,但一個好的習慣是在測試腳本過程中,最好也多看下傳入的kwargs參數的結構,提高代碼出錯排查效率。
強制退出python進程
在使用插件進行最后測試過程中,特別是之前測試已經沒問題,將debug方法注釋后,在插件調用過程中發現有問題,之前的作法只能是重新關閉Excel程序再打開Excel,很麻煩。
現在補充一個小功能,可以強制退出python進程,讓py腳本文件的緩存記憶可以清空,再次啟動某py腳本時,將重新先啟動python進程,再讀取py文件,保證新修改的內容可生效,而又不需要重啟excel。
最佳的測試方式是寫上debug方法體,每次重啟python進程來測試,將失去了交互式python的優點,等待python啟動會較為漫長。
總結
以上是生活随笔為你收集整理的[python交互]Excel催化剂与python交互原理剖析,py开发者按此规范可自行扩展功能...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软 PowerBI 被评为商业智能领导
- 下一篇: gRPC in ASP.NET Core