excel中想实现使用Python代替VBA,请问应该怎么做?

前提:因使用VBA代码可读性和 扩展性差,想用Python实现,以提高 复用率。 目前的想法是 在Excel中写入基础信息,执行宏时,VBA中通过库调…
关注者
1,452
被浏览
282,594

33 个回答

有了xlwings,excel就成了个gui了,结合numpy,pandas各种爽。

还有比如直接插入matplotlib图表,比如利用python自带的sort一行代码完成vba写个几十行大一百行才能完成的复杂排序。

刚看了下新版api,又有新的黑科技了,可以excel装个插件然后用python来写自定义公式

维护一个基于Excel的项目5年的苦逼怒答。“python(或者其他什么语言)操作excel”文件,按是否依赖Excel,可以分为两类。

第一类,excel文件只是用来存储数据,python对它的操作只是读和写。这种时候,对文件的操作不需要依赖Excel,你的机器上没有excel也能执行。在这种场景下,csv,txt等Excel支持的文本文件格式,都是很好的选择。这种情况,所谓的"python读写excel文件",实际上就是python读写文本文件,无非是这个文本文件是有一定格式的,找个csv的类库处理能事半功倍。如果csv/txt太过简单,文件内需要多个worksheet,那么可以保存为xls/xlsx格式,对应的读写操作用楼上提到的xlrd和openpyxl。

第二类,对文件的操作不止读写数据,包含更多的其他操作,比如插入行列,设置字体颜色,等待。这时候文件格式必然是excel only的格式(xls*)。对应的操作,其实最基础的,是通过COM调用Excel的API,实际上VBA调用的也是这个东西。python,以及其他很多语言,都是支持COM的,在脚本里面获取到了Excel.Application,就可以像在VBA里面一样写Application.Workbooks(1).Worksheet(1)了。下面sample是ruby写的,python应该也差不多。

#引用COM

require "win32ole"

#连接一个已经打开的Excel

xlApp = WIN32OLE.connect("Excel.Application")

#接下去就和VBA的写法没什么两样了

wb = xlApp.activeWorkbook #获取当前激活的workbook

ws = wb.worksheets(1) #获取第一个worksheet

ws.range('A1').value = "hello" #在sheet1的A1写入“hello”