Python 效率:openpyxl还是VBA?

Python 效率:openpyxl还是VBA?,python,vba,excel,openpyxl,Python,Vba,Excel,Openpyxl,我正试图找出哪一个对于类似的任务通常更快:使用VBA或openpyxl 我知道这可能取决于您想要完成的任务,但假设我有一个50个单元格宽、150000个单元格高的表格,我想将它从woorkbook a复制到工作簿B。 关于python是否会做得更好,或者Excel是否能更好地处理自身问题,有什么想法吗 我的直觉告诉我python应该相当快,原因如下: 为了让一个子系统从一个工作簿复制到另一个工作簿,两者都应该是打开并运行的,而使用python我可以简单地加载两者 VBA必须处理大多数任务中的大

我正试图找出哪一个对于类似的任务通常更快:使用VBA或openpyxl

我知道这可能取决于您想要完成的任务,但假设我有一个50个单元格宽、150000个单元格高的表格,我想将它从woorkbook a复制到工作簿B。

关于python是否会做得更好,或者Excel是否能更好地处理自身问题,有什么想法吗

我的直觉告诉我python应该相当快,原因如下:

  • 为了让一个子系统从一个工作簿复制到另一个工作簿,两者都应该是打开并运行的,而使用python我可以简单地加载两者
  • VBA必须处理大多数任务中的大量杂乱内容,并且需要占用大量系统资源
除此之外,我想知道我是否可以对openpyxl脚本做一些进一步的改进,比如多线程或可能同时使用NumPy


谢谢你的帮助

TBH最快的方法可能是使用远程控制Excel,因为这可以利用Excel的优化。VBA或许也能做到这一点,但我从未发现VBA的速度如此之快

Python必须从XML转换为Python,然后再转换回XML。你有大约5000000000个细胞,所以我希望这在我的机器上大约需要一分钟。我建议将只读和只读模式结合起来,这样可以降低内存使用


如果您只有数字数据(没有日期),则可以找到快捷方式,将相关的工作表XML文件从一个Excel文件“移植”到另一个Excel文件,只需更改相关元数据。

TBH最快的方法可能是使用远程控制Excel,因为这可以利用Excel的优化功能。VBA或许也能做到这一点,但我从未发现VBA的速度如此之快

Python必须从XML转换为Python,然后再转换回XML。你有大约5000000000个细胞,所以我希望这在我的机器上大约需要一分钟。我建议将只读和只读模式结合起来,这样可以降低内存使用


如果您只有数字数据(没有日期),则可以找到快捷方式,将相关工作表XML文件从一个Excel文件“移植”到另一个Excel文件,只需更改相关元数据即可。

TL;DR < /强>考虑与Excel文件直接连接(ADO在VBA或Python + PyWi32,PyoDoc中的Python,或.NET<代码> OLeDBLoad < /Cord>类,等等)。建立这种联系所用的语言就不那么相关了

长版本

如果您只想处理数据本身,您可能需要考虑使用ADO、PyoBoc或.NET<代码> OLebButix< /Cuff>类> /P>直接连接到Excel。 自动化Excel应用程序(使用Microsoft Excel对象模型,或(可能)使用xlwings)会产生大量开销,这是可以理解的,因为您可能不仅要读取Excel文件中的数据,还要操作Excel UI中的所有对象(窗口、菜单)以及数据之外的对象,例如在单个单元格或区域上设置格式

openpyxl确实没有所有这些UI元素的开销,因为它直接读取文件,但我认为仍然会产生一些开销,因为openpyxl必须提供文件中的所有信息,例如,不仅仅是数据单元格式

建立数据连接还允许您将Excel文件视为一个数据库,您可以向其发出SQL语句,并使用SQL的所有功能—连接、排序、分组和聚合


有关使用ADO和VBA的示例,请参见;DR < /强>考虑与Excel文件直接连接(ADO在VBA或Python + PyWi32,PyoDoc中的Python,或.NET<代码> OLeDBLoad < /Cord>类,等等)。建立这种联系所用的语言就不那么相关了

长版本

如果您只想处理数据本身,您可能需要考虑使用ADO、PyoBoc或.NET<代码> OLebButix< /Cuff>类> /P>直接连接到Excel。 自动化Excel应用程序(使用Microsoft Excel对象模型,或(可能)使用xlwings)会产生大量开销,这是可以理解的,因为您可能不仅要读取Excel文件中的数据,还要操作Excel UI中的所有对象(窗口、菜单)以及数据之外的对象,例如在单个单元格或区域上设置格式

openpyxl确实没有所有这些UI元素的开销,因为它直接读取文件,但我认为仍然会产生一些开销,因为openpyxl必须提供文件中的所有信息,例如,不仅仅是数据单元格式

建立数据连接还允许您将Excel文件视为一个数据库,您可以向其发出SQL语句,并使用SQL的所有功能—连接、排序、分组和聚合


有关使用ADO和VBA的示例,请参见。

openpyxl

这个链接对我很有帮助:

  • 如果您所做的只是读取,则仅在打开文件时使用read_

  • 使用内置迭代器

  • 我怎么强调都不过分——迭代器非常快

  • 尽可能不频繁地调用函数并存储中间值 变量中的数据。它可能会使代码有点臃肿,但往往是 效率更高,并且允许您的代码更具可读性(但是 与第1点和第2点相比,这是锦上添花。Python也可以是 什么是变量,什么是函数,模棱两可;但是作为一个 一般规则中间变量适用于多个函数 电话
  • 我在读一篇文章中的价值观
    wb = load_workbook(filename)
    
    wb = load_workbook(filename, data_only=True, read_only=True)