python与office结合可以⼲什么-震惊!当Python遇到Excel
程序员培训机构去到极客时间后,将开启你的认知⾍洞
本⽂主要内容:
1. Excel,你为什么如此强⼤
2. 软件开发也需要团队作战
3. Excel的集成⽅案演化
4. macOS特有的集成⽅案:applescript
5. Python与Excel集成,有哪些好处
6. 了解多个技术领域,可以间接提⾼⾃⼰的IQ
7. 提⾼开发效率的利器:⽣态渗透
8. 上代码:Python到底如何与Excel交互
9. ⽤Python替代VBA
本⽂主要讲Python与Excel的关系以及集成⽅案,Office家族的其他成员,如Word、PowerPoint与Excel拥有类似的功能,Python同样可以与Word、PowerPoint等Office成员结合,这些内容我以后会写⽂章讲解。
我相信看这篇⽂章的⼤多数⼈都是程序员。在⼴⼤程序员的眼⾥,Excel以及Office家族的其他成员完全不能与Python、Java、Sprint Boot这些技术相⽐。Office被贴上的标签就是:⾮专业⼈员的⼯具。是由那些体制内的⼈、会计、业务⼈员使⽤的⼯具,其实这是对Excel 的最⼤误解。
1. Excel,你为什么如此强⼤
Excel从⼀问世开始,定位就是横跨办公和开发两界。在上个世界末推出的Excel5.0(那时还没有office这个产品套件)就已经⽀持VBA 了,那可是在Win32下(⼀种基于dos的shell,并不属于真正的操作系统)。尽管有些原始(以现在的眼光看),但在当时却显得极为先进。因为Excel(以及同期的Word)是⼈类史上第⼀个内置领域特定语⾔(DSL)的民⽤系统(可以被各个领域的⼈使⽤的系统)。正是因为有了VBA,Excel才显得⾮常强⼤。
可能有的程序员会问,即使Excel⽀持VBA,可以进⾏编程,也只不过是完成⼀些⾃动化操作⽽已。VBA的功能完全不能与Python、Java、C#、C++这些被⼴⼤程序员熟知的编程语⾔相⽐,更别说成为编程领域的主流了。没错,如果单凭VBA本⾝的确⽆法与这些流⾏的编程语⾔相⽐,但要知道,VBA和Excel本⾝可以与其他开发⼯具融合,也就是说,可以让VBA和Excel成为⾃⼰系统的⼀部分,这就显得⾮常⽜逼了。
2. 软件开发也需要团队作战
那么为什么要将Excel与其他系统结合呢?其实在我们创业时、在公司完成⼀个项⽬时,甚⾄在参加篮球⽐赛时,都会⾼频率提到⼀个词:团队。 现在也流⾏着⼀句话:没有完美的个⼈,只有完美的团队。
也就是说,没有⼈可以什么都会,什么都擅长,就算是天才达芬奇也是如此。但团队就不⼀样了,即使某项⼯作团队⾥没⼈能做,也可以扩充团队成员,吸引能做这项⼯作的⼈加⼊团队。
其实在开发软件的过程中也同样是讲究团队作战的。不管我们使⽤的开发⼯具有多强⼤,⽤户社区由多庞⼤,都⽆法规避⼀个事实:任何技术都不可能适合完成所有的⼯作。 当然,还有另外⼀种说法就是尽管某种技术可以完成某项⼯作,但并不是最好的选择。
现在回到Excel上来。⾸先要知道Excel擅长什么,对,没错,Excel擅长表格和图表的制作。尽管有⾮常多的开发⼯具也可以制作表格和图表,但很显然,Excel是其中最好的(主要⽤门槛、易⽤性、功能和⽤户基数的综合指标来衡量)。所以,如果某⼀个系统要求将数据转换为表格和图表,那么这项任务交给Excel来完成是再合适不过了。
3. Excel的集成⽅案演化
在不同的时期,Excel的集成⽅案也不尽相同。在Excel的⼤眼夹时代(那时还是Office97和Office2000的时代),微软与开源世界还⽔⽕不容,我也还处于学⽣时代。在那个时代,Excel只能与Windows下的开发⼯具融合,其中主要的开发⼯具包括微软的VC、VB、以及
Borland(现在已经消失)的Delphi、C++ Builder等。
可视⽅式:通过OLE组件将Excel直接嵌⼊窗⼝中,其实就相当于拥有了⼀个⾼级版的表格编辑器
VBA⽅式:通过ActiveX技术创建Excel.Applicaiton对象(⼀般是CreateObject函数),然后就可以任意调⽤VBA的API了,我⽐较喜欢这种⽅式。通过这种⽅式,可以将系统中的数据按着⼀定的格式直接传输到Excel中,给⽤户提交的是包含表格数据的Excel⽂档。
反客为主⽅式:这种⽅式将Excel作为主体。也就是说,主要的操作界⾯是Excel,在Excel中调⽤或访问其他系统。例如,很多年前我做过⼀个基于Excel的报表系统。该系统分别使⽤Delphi和Excel实现。Delphi做的管理系统,将数据发送给Excel。但需要⽤户⾃⼰调整报表格式。我采⽤的⽅案是通过
Excel的VBA实现表格的格式设置。其中有部分功能需要访问SQL Server数据库,以及完成与Delphi实现的系统类似的功能,这部分功能使⽤了Delphi封装的Dll(COM组件),然后通过Excel反过来调⽤这些DLL。最终⽤户使⽤的⽅式是⽤主系统完成⼤部分⼯作。如果想调整Excel的报表样式,可以直接⽤Excel来完成(会在Excel上提供⼀些⾃定义的菜单和按钮,现在通过加载项【Add-ins】实现)
不过随着时间的推移,现在的微软已经拥抱开源和其他系统。所以Excel也不仅限于Windows。在macOS上也可以完成在Windows上的⼤多数⼯作,甚⾄Visual Studio也推出了macOS版本。⽽且
core也可以同时跨Windows、macOS和Linux三个平台,SQL Server也开始⽀持Linux。以后我们会在更多的场景看到微软的⾝影。
既然Excel已经⽀持了macOS平台,就需要采⽤跨平台的⽅式与Excel集成。当然,前⾯介绍的⼏种⽅案现在仍然可⽤,但仅限于Windows 平台。不过我们⽆法预测⽤户到底使⽤哪⼀个平台,所以应该尽量使⽤跨平台⽅案。
⽬前主要的跨平台⽅案有如下3种:
直接修改xlsx⽂件
通过VBA间接调⽤其他编程语⾔
使⽤office.js
第1中⽅式有很多编程语⾔都⽀持,例如,Python、Java、Julia、Go、JavaScript。⼏乎你能想到的编程语⾔,都有⽀持xlsx格式的库。这⾥只讨论Python。如果想了解更多关于集成Excel的技术,可以关注我的:极客起源。
在Python语⾔中,⽀持Excel⽂件格式的库⾮常多,如⾮常著名的openpyxl、xlsxwriter等。通过这些
库,可以在不依赖Excel环境的情况下,⽣成xlsx格式的⽂件。不过这些库基本是只是⽣成Excel⽂件,并不能更好地利⽤VBA以及更⾼级的功能。由于Excel⽂件格式⾮常复杂,完全⽀持⽐较困难,所以这些库只是⽀持⼀部分Excel的功能,但这些功能对于绝⼤多数需求已经⾜够了。
第2种其实是⼀种取巧的⽅式,通过VBA做桥,调⽤其他编程语⾔,相当于⽤其他编程语⾔代替了VBA。这其中典型的就是xlwings。尽管这种⽅式从表⾯上看可以直接在Excel中像使⽤VBA⼀样使⽤这些编程语⾔,但从本质上看仍然是直接写xlsx⽂件。功能其实与第1种⽅式相同,因为这并不是官⽅⽀持的功能。
第3种是office.js,这是微软官⽅提供的⼀个基于JavaScript的程序库。基于Node.js,可以⽤JavaScript完全取代VBA实现Excel以及Office其他成员的加载项。office.js可以在Electron、Web应⽤以及⼤多数基于JavaScript的场景中使⽤。关于office.js的内容我以后会写⽂章详细描述,对office.js感兴趣的同学也可以关注"极客起源”,会不定期更新这⽅⾯的内容。
4. macOS特有的集成⽅案:applescript
除了跨平台解决⽅案外,在macOS上,还⽀持使⽤applescript与Office(Excel、World、PowerPoint等)交互,这些内容我以后再撰写⽂章详细讲解。如果要了解excel applescript api,可以参考Excel Reference。从效果来看,applescript操作Office与在Windows下通过COM组件操作Office类似,可以完全控制Office,只是applescript的语法更接近⾃然语⾔。
下⾯的applescript代码会创建⼀个新的Excel⽂档,并将其保存为first.xlsx⽂件。
运⾏后,会看到⼀个打开的Excel⽂档,并且已经保存为firstx.xlsx⽂件。
5. Python与Excel集成,有哪些好处
Excel对于Python来说,可以将Excel看做是⼀个可编程的⼤组件。这个组件的主要功能就是可以制作任意复杂的报表和图表。尽管Python 有很多模块可以制作报表和图表。但这些模块的功能和效果完全
没办法与Excel相⽐。所以将Python与Excel结合的最⼤好处是可以快速完成制作报表的任务,⽽且效果杠杠滴。
将Python与Excel相结合,其实还会引出另外⼀个思考,就是成为专家还是通才的问题。我听到有很多程序员说,要将某种语⾔搞通,如PHP、Python、Java等,然后就可以很轻松解决所有的问题。结果真是这样吗?
很久以前,我听过⼀个关于微软的故事(相信很多⼈也听过),在微软有⼀个⼏⼗⼈的团队,花了好⼏个⽉还没完成⼀个项⽬,听说是遇到了某些难题。这时有⼀个⽼程序员(据说⾄少50岁以上)将⾃⼰关在办公室⾥⼀个星期,搞定! 我们先不管这个故事是真是假,那么从理论上来说,是否有这个可能呢?其实如果光看编程速度,再⽜叉的程序员,也不可能⽐普通程序员快⼏⼗倍,更何况数百倍了。但还有另外⼀种可能,就是这名⽼程序员使⽤了完全不同的⽅法,绕过了⼤多数影响效率的因素,例如,使⽤了不同的⼯具,采⽤了不同的转换⽅式,
甚⾄使⽤了不同的设计理念等等。这就不是能⼒问题了,⽽是认知的问题。我将其称为"认知⾍洞”。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论