在工作中遇到一些重复的excel操作,例如,检查excel中的填报情况和生成下一次的填报新模板excel。
每周重复这样操作的时间,总想着有没有可以自动化的办法可以搞定,毕竟程序员厌恶重复嘛!
这段在帮助一位同事用python搭建一个web服务后,就非常饶有兴趣地决定用python胶水语言试试,以方便工作。
因为检查和拷贝excel的重复工作,是与windows环境绑定比较紧密的,所以,就不用太关心跨平台的问题。可以利用python os.popen操作windows命令行命令,以及使用pywin32的组件模块完成这个操作。
pywin32 访问excel的方法,在网上也有不少例子。参考一下,非常平滑地完成前面检查的动作。但是,在复制sheet页时,网上的sheet.Copy(NONE,afterSheet)的语法,并不能工作的很好,就遇到了阻点。
后来,查阅网上资料,了解到pywin32是借助win32 COM组件进行工作的,而且控制台上打印的异常堆栈也是说明这样一点。而且也提到,pywin32操作excel的接口与VBA 操作excel的接口类似。所以,就从搜索VBA开始,最后也很有幸地在MSDN上查到这些接口说明。
在MSDN 研究一通,发现对于excel sheet Copy动作,它的参数其实就是所要Before和After的sheet,而且参数可选。所以,网上pywin32例子中传入copy动作的第一个参数使用None有点绕了。
因为excel copy sheet到某个sheet页之前后之后,其实就是一个获取不同sheet,然后作为第一个参数传入即可,完全可以绕过对于NONE的使用。
有时有些问题,一直搞不一定时,退下来想想、分析分析,或就有办法了:)
现在又加上PowerCmd这个软件来方便windows 命令行输入,工作变得会更便捷了,哈哈