Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
Python 复制工作簿的速度提高10倍';的工作表,该工作表在当前工作簿中有100k行_Python_Excel_Vba_Powerquery - Fatal编程技术网

Python 复制工作簿的速度提高10倍';的工作表,该工作表在当前工作簿中有100k行

Python 复制工作簿的速度提高10倍';的工作表,该工作表在当前工作簿中有100k行,python,excel,vba,powerquery,Python,Excel,Vba,Powerquery,我知道这可能已经被问了一百次了,但是有没有一种方法可以让我下面的代码更快,甚至更快,甚至更快10倍?我喜欢Python Excel代码等 这可能是一个更为不同的问题,因为我不仅仅局限于简单的VBA 代码: 我也对PowerQuery-then-refresh路线持开放态度。根据您选择使用的资源,有几种可能的途径可以通过它 您没有提到是否要复制值、公式或两者。我只假设值 如果您可以在工作簿关闭时进行复制,那么pyopenxl或xlrd和xlwrt就可以做到这一点。这两种方法都可以复制值和公式,但这

我知道这可能已经被问了一百次了,但是有没有一种方法可以让我下面的代码更快,甚至更快,甚至更快10倍?我喜欢Python Excel代码等

这可能是一个更为不同的问题,因为我不仅仅局限于简单的VBA

代码:


我也对PowerQuery-then-refresh路线持开放态度。

根据您选择使用的资源,有几种可能的途径可以通过它

您没有提到是否要复制值、公式或两者。我只假设值

如果您可以在工作簿关闭时进行复制,那么pyopenxl或xlrd和xlwrt就可以做到这一点。这两种方法都可以复制值和公式,但这两种方法都不能计算公式,但从您的描述来看,这听起来没问题

如果在进行复制或移动时需要打开工作簿,有一些很棒的解决方案可以使用COM集成Python和Excel,和DataNitro。使用这些解决方案,您可以编写一些Python代码进行复制。如果只需要值,可以使用数据帧来移动数据

我只使用了xlwings(和[FlyingKoala]——使用xlwings)。xlwings促进了Python和Excel之间的双向通信,因此您可以从Excel调用Python,也可以从Python调用Excel(包括VBA)。这项技术可以大大加快操作速度,尤其是在报告和建模方面

还有一个额外的优势,他们可以读取Excel公式并将其转换为Python代码,然后执行(评估)动态生成的Python代码

使用xlwings仅复制值的示例。我用它复制了100000行26列(A到Z),耗时17秒

import xlwings as xw
import numpy as np

@xw.func
@xw.arg('range_to_copy', np.array, doc='')
@xw.ret(index=False, header=False, expand='table')
def copy_values(range_to_copy):

    return range_to_copy

这回答了你的问题吗@Variatus我只是需要帮助,我还问Pyhon VBA(如果有这样的东西)是否比单纯的VBA好一点。@0m3r谢谢。我会去那个网站。bradbase在我看到你的帖子之前,我实际上已经导入了xlwings,但从来没有机会去探索它。这些是我的要求,closebook closed,我只复制值,但就像其他原始文件一样,它们有头,我唯一的Python问题是我们公司严格要求,不确定我是否可以在最终用户端轻松安装Python(和其他库)。但我仍然对它持开放态度。Openpyxl或xlrd和xlwrt可能会做得足够好。这只是编写迭代器将值从工作表a中的单元格传输到工作表B的一种情况。Openpyxl能够告诉您工作表中的哪些单元格已满(worksheet.cell_范围为左和右),并优化了读写模式以获得更好的性能。在安全性方面,openlyxl能够抵御一些xml攻击;“默认情况下,openpyxl不会防范二次放大或十亿笑xml攻击。要防范这些攻击,请安装defusedxml。”非常感谢,bradbase。我将探索openpyxl,也许最好先关注一个。嘿,你拥有bradbase.net网站吗?那又怎样?老而金。再次感谢你的帮助。
import xlwings as xw
import numpy as np

@xw.func
@xw.arg('range_to_copy', np.array, doc='')
@xw.ret(index=False, header=False, expand='table')
def copy_values(range_to_copy):

    return range_to_copy