[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脚本中,约定的几点规范需要遵守。

  1. 插件调用的python方法为run方法名

  2. run方法名只有一个参数是kwargs,参数名不能修改。

  3. 参数返回的数据类型是字典结构,已在common公共模块中写了方法

def return_result(restype,contents):return {'type':restype,'contents':contents}

此方法需传入两个参数,第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_():pass
  • common公共模块的调用,对应的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启动会较为漫长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

background图片不显示_一种解决Retina屏幕1px边框显示问题的方案

一、背景介绍&#xff1a;Retina是一种新型高分辨率的显示标准&#xff0c;是把更多的像素点压缩至一块屏幕里&#xff0c;从而达到更高的分辨率并提高屏幕显示的细腻程度&#xff1b;同时CSS样式表中px单位是一个相对值&#xff0c;并不是绝对值&#xff0c;实际在Retina屏幕中…

gRPC in ASP.NET Core 3.x -- Protocol Buffer(3)更新消息类型

当你第一次定义Protocol Buffer的消息的时候&#xff0c;你肯定会给消息设定一套规则需求。但是随着时间的推进&#xff0c;你的业务可能会发生了变化&#xff0c;与此同时&#xff0c;你的Protocol Buffer消息类型的需求也会随之变化。也就是说&#xff1a;有一些字段可能会发…

opengl如何画出一个球_少儿美术绘画教程:毛线球

小朋友们&#xff0c;你们平时画画有没有遇到过没有灵感的时候&#xff0c;面对画纸却不知道画些什么呢&#xff1f;今天我们来介绍一种创意思维&#xff0c;叫发散性思维。以一个毛线球为出发点。通过毛线球&#xff0c;我们可以想到圆球&#xff0c;通过圆球我们可以想到圆形…

数据结构---后序和中序遍历的二叉树序列还原二叉树

数据结构—后序和中序遍历的二叉树序列还原二叉树 代码&#xff1a; #include<stdio.h> #include<stdlib.h> typedef struct bstTree {char data;struct bstTree* lchild, *rchild; }bstTree; bstTree * reStoreTree(char* pre, int preSt, int preEnd, char *mi…

Asp.Net Core 混合全球化与本地化支持

前言最近的新型冠状病毒流行让很多人主动在家隔离&#xff0c;希望疫情能快点消退。武汉加油&#xff0c;中国必胜&#xff01;Asp.Net Core 提供了内置的网站国际化&#xff08;全球化与本地化&#xff09;支持&#xff0c;微软还内置了基于 resx 资源字符串的国际化服务组件。…

最大连续子数组和 动态规划_剑指Offer算法题 33:连续子数组的最大和

题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢&#xf…

数据结构---顺序查找和二分查找

数据结构—顺序查找和二分查找 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> int n;//查找元素数组的长度 void seqCheckValue1(int* a) {//顺序查找1,有越界判断int v a[0];for (int i 1; i < n; i) {if(a[i…

git上托管的代码如何部署在阿里云上_居然仅用浏览器搞定Spring Boot应用的开发与部署...

最近有幸试用了一下阿里云的一个新产品&#xff1a;云开发平台&#xff0c;体验一把全新的开发模式&#xff01;虽然中间也碰到了一些问题&#xff0c;但整体的体验透露着未来感&#xff0c;因为整个过程都不需要使用我们最常用的IDEA&#xff0c;仅依靠浏览器就把一个Spring B…

Kubernetes 与 Helm:使用同一个 Chart 部署多个应用

k8s 集群搭建好了&#xff0c;准备将 docker swarm 上的应用都迁移到 k8s 上&#xff0c;但需要一个一个应用写 yaml 配置文件&#xff0c;不仅要编写 deployment.yaml 还要编写 service.yaml &#xff0c;而很多应用的配置是差不多的&#xff0c;这个繁琐工作让人有些望而却步…

数据结构---BF字符串模式匹配

数据结构—BF字符串模式匹配 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> int BF(char * S, char* T,int pos,int n,int m) {//暴力算法求解子串T在S中第一次出现的位置int i pos, j 0;while (i < n &&a…

windows系统如何cmake_Windows操作系统如何快速增加分区?建议收藏

现在新买的电脑大都是出厂单分区的设置&#xff0c;也就是只有系盘C&#xff0c;没有D、E之类。于是也问过厂商的工作人员&#xff0c;得到的答复是恢复备份的机制已经十分完善&#xff0c;保证用户使用安全毫无问题。不过&#xff0c;相信小伙伴们和我一样&#xff0c;内心还是…

大白技术控 | Windows10X 模拟器简单上手体验

点击蓝字“大白技术控”关注我哟加个“星标★”&#xff0c;每日 19:30&#xff0c;好文必达&#xff01;前言Windows10X 和 Windows10 有什么区别&#xff1f;当这个问题摆在我面前的时候&#xff0c;我就脱口而出&#xff1a;区别&#xff1f;双屏了呗&#xff01;这个答案有…

word List 21

word List 21 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

Asp.Net Core Identity 骚断腿的究极魔改实体类

前言默认的 Identity 实体类型在大多数时候已经基本够用&#xff0c;很多时候也只是稍微在 IdentityUser 类中增加一些自定义数据字段&#xff0c;比如头像。这次&#xff0c;我要向园友隆重介绍我魔改之后的 Identity 实体类&#xff0c;能支持一些特别风骚的操作。当然也完全…

[蓝桥杯2015决赛]四阶幻方

题目描述 把1~16的数字填入4x4的方格中&#xff0c;使得行、列以及两个对角线的和都相等&#xff0c;满足这样的特征时称为&#xff1a;四阶幻方。 四阶幻方可能有很多方案。如果固定左上角为1&#xff0c;请计算一共有多少种方案。 比如&#xff1a; 1 2 15 16 12 14 3 5 13 7…

数据结构---模式匹配

数据结构—模式匹配 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define N 100 int next[N]; void getNext(char *T,int *next,int m) {//求解当前字符前面的最大公共前缀和后缀int j 1,k0;next[j] 0;//从1开始…

CKEditor 4编辑器已与Vue.js集成

虽然 CKEditor 4 不是目前主要维护的分支&#xff0c;不过官方并没有让它落后于潮流。近日&#xff0c;CKEditor 团队发布了与 Vue.js 框架原生集成的 CKEditor 4。这就意味着&#xff0c;开发者可以通过<ckeditor />标签以 Vue.js 组件的形式使用 CKEditor 4 &#xff0…

[蓝桥杯2016初赛]卡片换位-bfs

题目描述 你玩过华容道的游戏吗&#xff1f;这是个类似的&#xff0c;但更简单的游戏。看下面 3 x 2 的格子 在其中放5张牌&#xff0c;其中A代表关羽&#xff0c;B代表张飞&#xff0c;* 代表士兵。还有一个格子是空着的。 你可以把一张牌移动到相邻的空格中去(对角不算相邻…

数据结构---KMP模式匹配病毒感染人的DNA检测

数据结构—KMP模式匹配病毒感染人的DNA检测 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define N 100 int next[N]; void getNext(char *T, int *next, int m) {//求解当前字符前面的最大公共前缀和后缀int j …

推荐一个很棒的开源工作流elsa-core

开源项目orchard主要开发人员Sipke Schoorstra 开源了一个netcore 工作流项目&#xff0c;地址&#xff1a;https://github.com/elsa-workflows/elsa-core&#xff0c;最新版本1.2&#xff0c;正在开发2.0版本 。Spike 是参照Orchard Core的工作流引擎的原理&#xff0c;将其转…