通过xlwings UDF将数据框返回到excel

时间:2017-09-12 22:14:04

标签: python excel vba user-defined-functions xlwings

我尝试使用Python,Xlwings库和Excel创建用户定义函数。

目标是使用一个函数,让我们调用ret_data_frames不仅可以填充A1单元格,还可以填充所有需要单元格来返回整个数据框。

如上图所示:

enter image description here

enter image description here

我使用的数据框是通过网页抓取获得的,并且尺寸较大,所以我让我们使用一个简单的数据框,如果这样做,我将这个想法替换为原始代码

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来重现数据帧?

由于

2 个答案:

答案 0 :(得分:1)

你需要有正确的xlwings reutrn

  

@ xw.ret(index = False,header = True,expand ='table')

函数顶部的装饰

@xw.func
@xw.ret(index=False, header=True, expand='table')
def ret_data_frame(data):
    return get_data_frame(data)

答案 1 :(得分:1)

这对我有用:

@xw.func
@xw.arg('x', pd.DataFrame, index=False, header=True)
@xw.ret(header=True)
def get_my_df(x):
    return x

通过这种方法,您可以通过多种方式返回dataFrame

@xw.ret(header=True, index=True, expand='table')

您可以将dataFrame立即返回到Excel,而无需将其包装到Excel数组公式中。