将包含100k行的工作簿工作表复制到当前工作簿的速度提高10倍

2024-05-15 21:23:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

代码:

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlManual

    Dim wb_raw As Workbook
    Set wb_raw = Workbooks.Open("C:\Projects\Raw.xlsx")

    wb_raw.Worksheets(1).Copy Before:=ThisWorkbook.Worksheets(2)
    ' the worksheet being copied has 100k rows

    wb_raw.Close

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlAutomatic

我也对PowerQuery然后刷新路径开放


Tags: 方法代码falsetruerawapplicationvbaexcel
1条回答
网友
1楼 · 发布于 2024-05-15 21:23:20

根据您选择使用的资源,有一些潜在的途径可以通过这一点

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

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

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

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

PyXllFlyingKoala还有一个额外的优势,它们可以读取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

相关问题 更多 >