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

WBOY
發布: 2016-06-06 16:23:01
原創
6281 人瀏覽過

前提:因使用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.”
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板