前提:因使用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.”