Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Pyxll将数组从Excel导入Python_Python_Excel_Pandas_Pyxll - Fatal编程技术网

使用Pyxll将数组从Excel导入Python

使用Pyxll将数组从Excel导入Python,python,excel,pandas,pyxll,Python,Excel,Pandas,Pyxll,我正在拼命尝试使用Pyxll来编写一些excel函数,这些函数获取一组数组,用Python加载它们,将它们转换为数据帧,稍微处理一下数据,然后返回最终的数据帧。 现在,为了返回我找到的数据帧,但无论我如何尝试,我似乎无法将加载的excel数组转换为我可以使用的数据帧 例如,我尝试使用下面的代码,但没有成功。也许如果我有办法知道Python中加载了什么以及它的外观,也许我有更好的机会理解如何操作数据,但我不知道如何在我的输出区域中查看输出 有没有人知道一种简单的方法,可以将数据从excel导入py

我正在拼命尝试使用Pyxll来编写一些excel函数,这些函数获取一组数组,用Python加载它们,将它们转换为数据帧,稍微处理一下数据,然后返回最终的数据帧。 现在,为了返回我找到的数据帧,但无论我如何尝试,我似乎无法将加载的excel数组转换为我可以使用的数据帧

例如,我尝试使用下面的代码,但没有成功。也许如果我有办法知道Python中加载了什么以及它的外观,也许我有更好的机会理解如何操作数据,但我不知道如何在我的输出区域中查看输出

有没有人知道一种简单的方法,可以将数据从excel导入python,处理后返回excel,而无需保存文件、在python中加载文件、处理数据并覆盖现有文件

@xl_func("string[] name, var[] day, string[] method, string[] currency, numpy_array amounts, date[] dates: dataframe")
def test(name, day, method, currency, amounts, dates):

df_name = DataFrame(name, columns = ['Name'])
    df_method = DataFrame(method, columns = ['Method']).ix[1:]
    df_currency = DataFrame(currency, columns = ['Currency']).ix[1:]


    df = df_name.join(df_method).join(df_currency)

    cols = ['Name', 'Currency', 'Method']
    df = df[cols]


return DataFrame(dates)
查看(Python2和3)、(仅Python2)和(Python2和3)模块,以便与
pandas
一起使用。熊猫在代码中有它们的钩子;您可以阅读有关
读取excel
到excel
函数的所有信息。

查看(我的)库。它使来回发送数据帧变得非常简单:

>>> from xlwings import Workbook, Range
>>> import pandas as pd
>>> wb = Workbook()  # Pass in the path of a file to work with an existing Workbook
>>> df = pd.DataFrame([[1., 2.], [3., 4.]], columns=['one', 'two'])
>>> Range('A1', index=False).value = df # send it over to Excel
>>> data = Range('A1').table.value  # read it back
>>> pd.DataFrame(data[1:], columns=data[0])
   one  two
0    1    2
1    3    4

请特别参阅关于以及如何从中调用它的文档。

PyXLL可以使用自定义类型接受和返回数据帧

看看这个例子:

要查看输出,请查看日志文件。 要使用IPython提示符在Python中以交互方式进行游戏,请使用以下示例:

使用函数比使用命名范围要好得多

您也可以使用PyXLL注册键盘快捷键。有关自动调整数组公式输出大小的快捷方式,请参见此示例:


如果您需要更多帮助,请与支持部门联系以获得快速响应。

谢谢,但我不想使用Canopy,也就是说,我想用Python编写函数,然后从excel运行所有内容,就像运行VBA代码一样!这看起来太棒了!请回答两个问题:1。它适用于64位系统吗?因为我在运行斐波那契示例时出错。2.是否可以将动态值传输到我用Python编写的函数?因为在您的示例中,您认为输入在B1上是理所当然的,但是如果我想将数据存储在单元格C1中,而不必更改Python代码,该怎么办?谢谢!!你好1.是的,它可以与64位Python一起使用,甚至可以与32位Excel结合使用。但在Windows上,您需要按照文档中的说明安装依赖项pywin32。2.您可以使用命名范围。如果左上角的单元格是一个命名区域,则可以使用灵活的动态设置,例如:
range('NamedRange').table.value
。如果您需要更多帮助,请告诉我。谢谢,但我正在运行Canopy,因此我已经安装了pywin32 219.0.0-1。您想让我给您发送一个我收到的错误的屏幕截图吗?这确实是一个Excel 64位问题:注释掉xlwings VBA模块中的
Private Declare Function system Lib…
行,作为解决方法。它将在下一个版本中修复,问题记录在此处:这已在v0.2.3Hi Tony中修复,第一个链接已断开,您有其他链接吗?嗨,哦,抱歉,回购go重新组织了一点。它现在在熊猫名录中-这里:谢谢!我一定会调查的!:)Pandas支持现在内置于PyXLL中,因此不再需要该示例。有关详细信息,请参阅。