只需简单地编写小段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启动会较为漫长。

[python交互]Excel催化剂与python交互原理剖析,py开发者按此规范可自行扩展功能...相关推荐

  1. python处理excel表格实例-python读写Excel表格的实例代码

    本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 安装两个库:pip install xlrd.pip install xlwt 1.python读excel--xl ...

  2. python与excel的应用-python基础之类与对象的应用-操作excel

    python操作excel openpyxl 前置说明 安装openpyxl 只支持.xlsx后缀 创建excel 手动创建:日常手动创建,双击excel图标 代码创建:后面讲 打开excel ima ...

  3. python处理excel表格教程-python操作excel(内附python教程分享)

    今天学习了下xlwings这个库,目的是为了让计算机自动化操作excel表,当某天需要做一些很繁琐的事情,就可以派上用场啦. 基本对象 网上刮来的图,很好. 大概就是xlwings中可以有多个exce ...

  4. python导入excel表格-通过Python将Excel表格信息导入数据库

    前言 公司原采用Excel表格方式记录着服务器资产信息,随着业务的增加,相应的硬件资产也增加,同时物理机虚拟化出多台虚拟机,存在表格管理杂乱.变更资产信息不能及时相互同步, 为了紧跟时代的步伐,老大搞 ...

  5. python和excel的区别-Python与Excel 不得不说的事情

    数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道. 如果仅仅是要以表单形式保存数据,可以借助 ...

  6. python与excel的关系-Python 与 Excel 不得不说的事

    原标题:Python 与 Excel 不得不说的事 数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel ...

  7. python与excel的应用-Python 3 读取和存储Excel数据(应用到接口测试)

    1.利用cmd命令安装第三方库 openpyxl 同时支持读写操作,支持的Excel是以.xlsx结尾的文件. 命令: pip install openpyxl [命令:pip install req ...

  8. python与excel的应用-python怎样在excel中应用?

    python在excel中应用的方法:首先[return sorted(s)]在本地建立一个目录,并保存这个代码并命名为[Methods.py]:然后打开Excel,填写一些数据以便提供python脚 ...

  9. 怎么用python处理excel文件-用python处理excel文件有多轻松?工作从未如此简单

    最近需要频繁读写 excel 文件,想通过程序对 excel 文件进行自动化处理,发现使用 python 的 openpyxl 库进行 excel 文件读写实在太方便了,结构清晰,操作简单.本文对 o ...

最新文章

  1. Android7.0 PowerManagerService(1) 启动过程
  2. html div box,html – 为转换后的div添加box-shadow
  3. 深度学习之卷积神经网络(3)卷积层实现
  4. 【OS学习笔记】二十二 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之用户程序
  5. sql statements_Postgresql监控sql模块之pg_stat_statements模块--部署篇
  6. 第五章:几个重要技术总结
  7. qt中append函数_Qt 加载cern-root库 并调用root类
  8. 大数据_Hbase-API访问_Java操作Hbase_判断表是否存在---Hbase工作笔记0012
  9. linux 设置显卡命令,linux查看显卡命令
  10. 苹果手机安兔兔压力测试软件,10款跑分软件压力测试(一)
  11. videobox,一个错误的名字
  12. 树形动态规划(树状DP)小结
  13. 【0】依照Django官网:实现第一个django app 安装必要的工具/模块
  14. python词云图(以斗破苍穹为例)
  15. mac wordcloud 字体设置
  16. 5.Selector详解
  17. freemarker实现word文档模板动态生成
  18. Android实现按住缩小 松开放大的效果
  19. 把sql转换为pdm
  20. OpenHarmony3.0如何轻松连接华为云IoT设备接入平台?

热门文章

  1. JS:1.3,函数(function)
  2. hibernate中的id特殊属性hilo剖解(多用于继承关系)
  3. 32位应用程序单个进程最大占用内存是4GB
  4. 利用bootstrap插件设置时间
  5. 人工智能教程007:创建一个卷积神经网络(2)
  6. Java并发包--线程池框架
  7. serialization机制
  8. java内存:堆、栈、常量池、方法区
  9. JavaScript中的arguments,callee,caller
  10. UILabel自适应高度和自动换行