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

  • 时间:

前提:因使用VBA代码可读性和 扩展性差,想用Python实现,以提高 复用率。

目前的想法是 在Excel中写入基础信息,执行宏时,VBA中通过库调用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” 搜索pyxll,你值得拥有 有了xlwings,excel就成了个gui了,结合numpy,pandas各种爽。

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

刚看了下新版api,又有新的黑科技了,可以excel装个插件然后用python来写自定义公式 改用C#也可以,不需要一定用VBA。而且根据政策,等以后移植到UWP之后,都用C#了。 我想用js…逃跑ε=(´o`) cython也不能脱离python runtime。那个python.dll还是要的。excel调用python没问题。可以用pywin32,支持com。

我原来也用过,用python写了一个函数,在excel调用。

你这个需求感觉用cx freeze包装一下,在客户端安装就行了,不需要动用cython。 我曾经也有这样的想法,因为实在很难适应vba的语法,写一会vba,再写别的就各种掰不回来。

楼上各位提到的工具多少也试过,都没成功。

最后我用了一种曲线救国的方法:

1.先用vba写导出json的函数,注意,是函数,可以把excel里的数据直接转化为json并直接保存,每次源数据变化都会重新导出并保存。

2.用python读取json数据,进行运算,众所周知,python读取json的方法是很友好的

当然缺点就是,这种方式只能用于运算数据,不能更改excel的数据 datanitro 这个问题我觉得我还是有点专业的,虽不是财务,但是大量处理财务数据。

背景:公司程序员是绝对不可能给我一个数据库账号的,就算只有读权限也不行。公司内网web系统auth不完善,我可以轻松绕过权限爬数据。

起初,用xlrd和xlwt。后来发现这两个工具写起来有点麻烦,而且性能不是很优秀。于是改用内置的csv模块。在这个阶段,自动化程度不高,需要大量人工干预和预先处理

现在因为数据量大了,我就在本地弄了个lnmp环境和navicat,将paypal原始数据导入,操作数据库。现在正在写这方面的脚本,结合email模块和windows计划任务完成全部自动化。 SolverStudio for Excel 支持C# Python等,有没有人试过?

"An integrated environment for optimisation using modelling languages within Excel"

Developing for ExcelIf you are interested in developing for Excel, you might like the following resources.

Excel XLL add-in libary for writing C++ add-ins using Visual Studio 2010 (incl Express): Excel xll add-in library

Excel-DNA provides .net integration with Excel: Excel-DNA - Home

PyXLL

, a “free for non-commercial and evaluation purposes” Excel extension, allows Python code to be used to add menus and user functions within Excel.

Pycel

will compile a spreadsheet into Python. It was developed to allow non-linear optimisation of aircraft design.

PyWorkbooks

is an open source Python interface for Excel and GNumeric; it looks very nice, with careful thought given to speed issues (e.g. implenting Generators).

Python for Excel

(PFE) is a commercial (?) Python scripting system for Excel that “provides a complete set of tools for building of fully featured applications with Excel front end. It is in-process control of Excel with an out-of-process developement and debugging environment.”