效率:openpyxl还是VBA?

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

我知道这可能取决于你想要完成的任务,但是假设我有一个宽50格,高150,000格的桌子,我想把它从woorkbook A复制到工作簿B.

任何想法,如果python会做得更好,或者如果Excel更好地处理自己?

我的胆量告诉我,由于某些原因,Python应该相当快

  • 为了让副本从工作簿复制到另一个, 都应该是开放和运行 ,而与python我可以简单地加载两个;
  • VBA需要处理大量的任务,占用大量的系统资源

除此之外 ,我想知道是否可以对openpyxl脚本做进一步的改进,比如multithreading或者可能使用NumPy。

谢谢您的帮助!

TBH最快的方法可能是使用xlwings远程控制Excel,因为这可以利用Excel的优化。 VBA可能也能够进入,但我从来没有发现VBA要快。

Python将不得不从XML转换成Python。 你已经有了大约5,000,000个单元,所以我希望在我的机器上花费大约一分钟的时间。 我build议结合只读和只写模式来做到这一点,以保持内存使用低。

如果你只有数字数据(没有date),那么你可能能够find一个快捷方式,并将相关工作表XML文件从一个Excel文件“移植”到另一个Excel文件中,只需更改相关的元数据即可。

TL; DR考虑与Excel文件(VBA或Python + PyWin32中的ADO,Python中的pyodbc或.NET OleDbConnection类等)直接build立数据连接。 你做这种连接的语言是不太相关的。

长版

如果您只想使用数据本身,则可能需要考虑使用ADO,pyodbc或.NET OleDbConnection类直接连接到Excel。

自动化Excel应用程序(使用Microsoft Excel对象模型,或(可能的话)使用xlwings)会产生很多开销,这是可以理解的,因为您可能不仅仅读取Excel文件中的数据,还会操纵所有对象Excel UI – 窗口,菜单 – 以及超出数据范围的对象,例如格式化单个单元格或范围。

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

build立数据连接还允许您将Excel文件作为一个数据库来处理,您可以使用SQL的所有function – 连接,sorting,分组和聚集来发出SQL语句。

在这里看到一个使用ADO和VBA的例子。