Я пытаюсь создать пользовательскую функцию, используя Python, библиотеку Xlwings и Excel.
Цель состоит в том, чтобы использовать функцию, давайте вызовем ret_data_frames, чтобы заполнить не только ячейку A1, но и все необходимые ячейки для возврата всего фрейма данных.
Как на изображениях выше:
Фрейм данных, который я использовал, получен с помощью веб-скрейпинга и имеет большие размеры, поэтому я воспользуюсь простым фреймом данных и, если это сработает, заменю идею своим исходным кодом.
import numpy as np
import pandas as pd
def get_data_frame(data):
dates = pd.date_range(data,periods=6)
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
После этого необходимо создать функцию UDF
import xlwings as xw
from test import get_data_frame
@xw.func
def ret_data_frame(data):
return get_data_frame(data)
Эта идея не работает, поэтому вопрос:
Можно ли использовать UDF для воспроизведения фреймов данных?
Спасибо
=ret_data_frame()
в ячейку A1 и нажмите Ctrl-Shift-Enter, а не просто Enter), то пользовательская функция может вернуть массив (в данном случае 5x4 двух- размерный массив). В любом случае, именно так это работает с VBA - это может работать или не работать с xlwings. - person YowE3K   schedule 13.09.2017Worksheet_SelectionChange
илиWorksheet_Calculate
илиWorksheet_BeforeDoubleClick
) для вызова вашей функции. Ограничения на обновление только одной ячейки применяются только к пользовательским функциям (т. е. к функциям, вызываемым из ячейки Excel), а не к точно такому же коду, вызываемому из события. - person YowE3K   schedule 13.09.2017