ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1452|回复: 7

Excel、WPS调用Python的各种方式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-1-2 13:46 | 显示全部楼层 |阅读模式
本帖最后由 wanghan519 于 2024-1-2 13:59 编辑

今天刚发现了Python子版块,就先聊聊从表格调用py的各种方式吧,抛砖引玉
纯属个人浅见,博大家一笑

一、 最开始尝试的是vba里通过wscript.shell执行py脚本,然后从stdout读取输出的内容。但这种方式有几个问题:
    1. 需要给脚本传递参数或数据,但通过stdin传递时,缓冲区限制为4K
    2. python常需要禁用缓冲,且需要一边读一边写,否则管道会阻塞。这个问题后来用c#写加载项,不同线程同时读写凑合着用
    3. 直接调用exe容易被防火墙当成病毒,所以除非很简单的读取需求,不太推荐这种方式。
二、 然后尝试的xlwings,个人比较喜欢的方式是:
    1. 下载embed的Python包,解压装上pip后安装xlwings
    2. 通过xlwings quickstart --addin -s xxx,创建py和xlam文件
    3. 在py里写自定义公式或py宏脚本
    4. 在xlam里设置embed版python路径,并执行宏,导入py文件里的函数
    5. 可以把embed版的py和以上脚本打包发给别人,只需要加载xlam,确定指向python的路径正确,就可以使用py公式
    6. 有个小问题,这种方式的sql函数需要自己定义
三、 后来发现了xloil,相当于可用于WPS的xlwings,使用方式类似xlwings,但它本身提供了xll加载项,只需要在用户文件夹里正确设置ini文件,即可在wps里使用py自定义函数
四、 最近wps支持了fetch方法,那么上面的第一种方式就可以改成cgi方式,大概意思是:
    1. cgi是很古老的http服务器,收到浏览器或js宏发送的http请求之后,会把请求的body从stdin发送给Python脚本
    2. 脚本执行后只需要从stdout输出结果,cgi服务器会自动把结果当成response返回给浏览器或js宏
    3. apache2是经典的cgi服务器,前几天busybox-w32里的httpd开始支持cgi,或者用github上用golang写的那个quickserv
    4. 后两者不需要配置直接可用,只需要py脚本里写个print,就可以在js宏里通过fetch获取结果
五、 前几天才发现,在线的那个金山文档,开始支持Python脚本了,使用说明都在网站上,用起来很方便
六、 肯定还有其他方式使用py,比如365公式还没试过,或者wpsjs加载项的后台可以用Python写,或者从外部使用openpyxl直接处理xlsx文件且不依赖offce或wps,等等

总之,以上都是个人瞎胡乱试出来的,不一定对,如果有错误,或有更好的办法,希望朋友多交流

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-1-2 16:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
太专业了,顶一个

TA的精华主题

TA的得分主题

发表于 2024-1-2 16:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如果Python自定义函数里使用了各种库,还是得提前安装撒?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-2 16:48 来自手机 | 显示全部楼层
本帖最后由 wanghan519 于 2024-1-2 16:50 编辑
LIUZHU 发表于 2024-1-2 16:45
如果Python自定义函数里使用了各种库,还是得提前安装撒?


所以喜欢embed版本的Python,本地装好模块写好脚本,压缩成zip,发给别人。别人只需要解压就可以用,最多需要指定一下路径。
如果用安装版Python确实对方也得再装一次库。。。

TA的精华主题

TA的得分主题

发表于 2024-1-2 18:21 | 显示全部楼层
wanghan519 发表于 2024-1-2 16:48
所以喜欢embed版本的Python,本地装好模块写好脚本,压缩成zip,发给别人。别人只需要解压就可以用,最 ...

现在Python到底有些什么版本,哪个版本好用?我从官网上下载的,不知道怎么样?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-2 18:55 来自手机 | 显示全部楼层
LIUZHU 发表于 2024-1-2 18:21
现在Python到底有些什么版本,哪个版本好用?我从官网上下载的,不知道怎么样?

如果有同事用win7,最多只能用3.8版,也够用;否则就用3.11以上吧

然后就是Excel是64位,py就用64位;wps需要32位才能用xloil

embed是官网下载的,当成绿色版就好,反正也不用安装到注册表,解压出来几个都行。只是它安装时需要./python.exe -m pip install xxx这样指定具体装到哪个py,且uiautomator2之类的库只能用于安装版,embed装不上。。。

官方安装版也挺好用,只是安装时注意安装到所有用户和安装到本地用户有区别,到时候pip装库时别找不到位置;anaconda可以管理不同版本的环境,也方便安装包,喜欢哪个都行吧。这些版本都是可以共存的,主要是环境变量里路径别冲突了,用的时候明确一下就行

TA的精华主题

TA的得分主题

发表于 2024-1-30 23:50 | 显示全部楼层
拜读了wanghan519老哥的所有帖子,心路历程一摸一样。特此注册用户,向各位大佬学习。

TA的精华主题

TA的得分主题

发表于 2024-1-31 15:29 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-14 08:43 , Processed in 0.045596 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表