+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

从xlwings向vba返回值

发布于2020-01-17 13:00     阅读(1131)     评论(0)     点赞(7)     收藏(5)


让我们使用xlwings文档中的示例

给出以下python代码:

import numpy as np
from xlwings import Workbook, Range

def rand_numbers():
    """ produces std. normally distributed random numbers with shape (n,n)"""
    wb = Workbook.caller()  # Creates a reference to the calling Excel file
    n = int(Range('Sheet1', 'B1').value)  # Write desired dimensions into Cell B1
    rand_num = np.random.randn(n, n)
    Range('Sheet1', 'C3').value = rand_num

这是原始示例。

假设我们将其略微修改为:

import numpy as np
from xlwings import Workbook, Range

def rand_numbers():
    """ produces std. normally distributed random numbers with shape (n,n)"""
    wb = Workbook.caller()  # Creates a reference to the calling Excel file
    n = int(Range('Sheet1', 'B1').value)  # Write desired dimensions into Cell B1
    rand_num = np.random.randn(n, n)
    return rand_num #modified line

我们使用以下调用从VBA调用它:

Sub MyMacro()
    dim z 'new line'
    z = RunPython ("import mymodule; mymodule.rand_numbers()")
End Sub

我们得到z一个空值。

有什么方法可以直接将值返回给vba,而无需写入文本文件,也可以将值放在excel文档的第一位?

感谢您的指导。


解决方案


RunPython不允许您根据xlwings文档返回值要解决这些问题,请使用UDF,请参阅VBA:用户定义的函数(UDF)-但是,当前仅限于Windows。

https://docs.xlwings.org/en/stable/udfs.html#udfs



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/227491/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)