
Python
看到这个问题真让我头疼。我已经多次强调使用场景的重要性了,可这个问题的表述直接就把场景给忽略了,这就好比在说:不管在任何时候,
Python(py)都比
VBA更适合用来自动化处理
excel数据。确实,
VBA存在不少不便之处,像兼容性、跨平台性、无法进行代码管理以及安全性等方面的问题。但是要知道,如果你是在纯Windows环境下单机使用
excel,那么跨平台的缺陷跟你就毫无关系。而且我非常不提倡那种一个人编写自动化程序然后共享给大家使用的模式,我自己尝试过,这种模式很麻烦。
VBA操作起来繁琐,
Python操作起来也很繁琐,这就像是五十步笑
百步一样。
VBA是深度嵌套在包含
excel的Office套件中的,所以它自身针对
excel操作有很多优化之处。很多时候,不管你是使用C的Interop库,还是像xlwings之类的
Python库,只要你能力不足,你就会发现所有经过抽象层的
excel互操作(
excel interop)运行起来后的效率,和
VBA做同样操作相比,差得非常多。没错,你没看错,题目里所说的更适合
excel自动处理的
Python,只要你能力不够,实际上并不适合直接用来做
excel数据处理。根据我的实践经验,实际上比较现实且让人感觉舒服的
Python和
excel联动方式是这样的:如果使用xlwings直接对
excel文档进行操作,只要能力不足,它的运行效率会低得吓人。我曾经有过这样的经历,使用
Python直接进行
excel互操作,运行了20 - 30分钟,后来优化成区域(area)读取、用
Pandas处理之后,只需要几秒钟就完成了。所以实际上我认为并且推荐的
Python对
excel的最佳实践,从本质上来说,和
excel的关系真的不大。其实完全可以把
Pandas看作是纯代码、没有用户界面(UI)、像
excel一样处理表格的软件。这种架构、库本身就是为数据处理服务的。然后,这种类似的东西
excel自己内部就有:
微软有自己的Power Query M公式(Power Query M Formula)和数据分析表达式(DAX)。如果是在2012年,你说
Python好用是因为有
Pandas可以进行数据处理,我还能赞同你。可是现在都已经2023年了!都2023年了,一说到
excel自动化就只盯着
VBA吗?
VBA早就被大家构建成体系了,现在已经是一个立体的体系了。