欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-08 10:18:54
...
前提:因使用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 Excel
If 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.”
相关标签: Python VBA Excel