dingsir的个人博客分享 http://blog.sciencenet.cn/u/dingsir

博文

xlwings模块中将range对象传递给python代码的一个注意事项

已有 721 次阅读 2020-12-1 14:58 |个人分类:软件杂谈|系统分类:论文交流

在Excel有一些配方是如下格式的,为了简单方便的传递到其它字段中,我决定将配方转化为一种格式化的字符串,形式是"配方名称  百分数%成分名称,百分数%成分名称..." 这样的格式,这样即便不在Excel中也可以完整而精确的传递多成分的配方。比如如下的示例:

GetFormuText函数的应用.png

这个函数如果用VBA来写,自然也是比较简单的,但我的环境是Python +xlwings模块,Excel表格里面使用,Excel调用这个函数,代码体在Python当中(如果函数是Python调用,则没有这种问题)具体实现时碰到一个细节问题:

用rngs参数代表含有百分数的区域,它传入到Python代码中时,默认是用List对象而不是Excel的Range对象,这样在函数里面就不能使用rngs的行/列等信息,报错说rngs没有row属性之类。

开始我尝试将参数指定为rngs: xw.Range,结果不行,虽然可以在编写代码时提供一些信息补全,但传递的参数类型还是List。

在百度上搜索不到这方面的实例,怎么办呢?

最后想到 官方网站上可能有说明,果然在它们的教程中说了这个问题,需要指定arg参数的类型:

@xw.arg('rngs', xw.Range)

这样处理之后,函数运行就通过了。


GetFormuText函数的代码.png

不得不说,Python的代码真的很优雅,没有多余的end或 end if, 去除末尾的逗号,在VBA里面可能多写好几句,Python里面一个字符切片就解决了问题。



http://wap.sciencenet.cn/blog-1213210-1260650.html

上一篇:锂电电解液之化学品英文及缩写(2020-11-26更新)
下一篇:最大的字典 与 铹之后的化学元素名称

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2021-1-25 06:35

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部