возвращаемое значение в vba из xlwings

Давайте воспользуемся примером из документации 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?

Спасибо за любые указатели.


person jason m    schedule 29.05.2015    source источник
comment
Я не работаю с python, но посмотрю, есть ли Это то, что вы хотите?   -  person Siddharth Rout    schedule 30.05.2015
comment
Спасибо, но вопрос специфичен для xlwings. Я ценю ваш вклад, но, к сожалению, это не цель моего вопроса (опять же, это моя вина, а не ваша - объем просто должен говорить с xlwings из-за другой инфраструктуры).   -  person jason m    schedule 30.05.2015


Ответы (1)


RunPython не позволяет возвращать значения согласно документации xlwings. Чтобы решить эту проблему, используйте UDF, см. VBA: пользовательские функции (UDF) — однако в настоящее время это ограничено только Windows.

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

person Imtiyaz Shaikh    schedule 16.02.2019