Python 效率:openpyxl还是VBA?
我正试图找出哪一个对于类似的任务通常更快:使用VBA或openpyxl 我知道这可能取决于您想要完成的任务,但假设我有一个50个单元格宽、150000个单元格高的表格,我想将它从woorkbook a复制到工作簿B。 关于python是否会做得更好,或者Excel是否能更好地处理自身问题,有什么想法吗 我的直觉告诉我python应该相当快,原因如下:Python 效率:openpyxl还是VBA?,python,vba,excel,openpyxl,Python,Vba,Excel,Openpyxl,我正试图找出哪一个对于类似的任务通常更快:使用VBA或openpyxl 我知道这可能取决于您想要完成的任务,但假设我有一个50个单元格宽、150000个单元格高的表格,我想将它从woorkbook a复制到工作簿B。 关于python是否会做得更好,或者Excel是否能更好地处理自身问题,有什么想法吗 我的直觉告诉我python应该相当快,原因如下: 为了让一个子系统从一个工作簿复制到另一个工作簿,两者都应该是打开并运行的,而使用python我可以简单地加载两者 VBA必须处理大多数任务中的大
- 为了让一个子系统从一个工作簿复制到另一个工作簿,两者都应该是打开并运行的,而使用python我可以简单地加载两者李>
- VBA必须处理大多数任务中的大量杂乱内容,并且需要占用大量系统资源
谢谢你的帮助 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
这个链接对我很有帮助:
wb = load_workbook(filename)
wb = load_workbook(filename, data_only=True, read_only=True)