APP下载

使用 xlwings 扩展 Excel

2017-03-17朱昱光王立翔贾浩松

价值工程 2017年7期
关键词:扩展

朱昱光+王立翔+贾浩松

摘要:Excel 是一款极其成功的电子表格软件——所见即所得的编辑方式,丰富可扩展的公式系统,功能齐全的图表,逻辑清晰易于操作,保证了它在商业上的霸主地位。可供二次开发的 VBA,为 Excel 提供了更强大的技术后盾,为 Excel 扩展出无限种可能。不过,VBA 虽然强大,却有着无法克服的缺点:核心函数库不够完善,第三方库引入困难。本文从 xlwings 入手,通过在 Excel 中使用 Python,提供了另一种 Excel 扩展方式。

Abstract: Excel is an extremely successful spreadsheet software-WYSIWYG editing, rich and scalable formula system, full-featured charts, logical clear and easy to operate, to ensure its commercial dominance. For the secondary development of the VBA, Excel provides a more powerful technical support for Excel to expand out of infinite possibilities. However, VBA, although powerful, but it has insurmountable shortcomings: the core library is not perfect, the introduction of third-party library difficult. This article from the xlwings, through the use of Python in Excel, Excel provides another way to expand.

关键词:xlwings;Excel 扩展;文档管理

Key words: xlwings;Excel extensions;document management

中图分类号:TP317.2 文献标识码:A 文章编号:1006-4311(2017)07-0175-03

0 引言

传统上,扩展Excel主要使用VBA,VBA功能强大,在微软生态圈应用广泛。不过,VBA虽然强大,但也存在着一些缺点:核心函数库不够完善,第三方库种类较少、引入困难,其弱类型的特点也使得程序难于调试。本文从Python库xlwings入手,通过xlwings在Excel中使用Python,提供了另一种Excel扩展方式,提高了扩展效率。

1 xlwings 简介

xlwings是一个Python库。Python语言简洁的语法,完善的基础库,丰富的web组件,强大的科学计算库,可以为Excel提供超越VBA和Office的扩展能力。

xlwings封装了Excel的工作表、工作簿、单元格以及Range和Selection等的调用支持,并提供了从Python调用宏,从宏调用Python,以及Python函数作为Excel公式的调用方法,满足各种层次的操作需求。

1.1 xlwings引入方法

使用import xlwings as xw,即可在Python中操作 Excel。在VBA中调用Python,则需要在Excel开发工具中的VBA编辑器中导入xlwings.bas,该文件位于xlwings库目录中,该目录可通过xw.__path__查询。另外,通过命令行xlwings quickstart xlsname可直接创建包含了xlwings.bas的工作簿。

1.2 xlwings基礎操作

xlwings提供了多个层次的操作,大致分为App、Book、Sheet、Range以及Sharp、Chart、Picture、Name等其它操作。

App层次对应了Excel实例,App间互不干扰,可破除Excel不能同时打开同名工作簿限制。Book层次对应工作簿实例,Sheet层次对应工作表实例。以上三个层次均实现了Python和VBA形式,以下操作等价:Python形式,VB[1]A形式;xw.apps[0],xw.apps(1);xw.books[0],xw.books(1);xw.sheets[0],xw.sheets(1)。

除使用上述形式外,还可以通过Book('bookname')或Book('fullpath')的方式指定工作薄,通过Sheet('sheetname')的方式指定工作表。

Range是对Excel操作的主力,选择方式如下:Python形式,VBA形式;Range((1,1)),Range('A1');Range((1,1),(3,3)),Range('A1:C3');Range(Range((1,1)),Range((3,3))),Range('A1:C3')。此外,VBA形式还支持Range('A:B')、Range('2:4')、Range('Name')、Range('A1,C:C,A8')。

使用end函数可在相应方向上将选框移动到末尾,参数'up''down''left''right'分别相当于Ctrl+Up,Ctrl+down,Ctrl+left,Ctrl+right。

使用expand函数可在相应方向上扩展选区,参数'down','right','table'分别相当于向下方扩展选区,向右方扩展选区,向下方和右方同时扩展选区。

Range(rng).value对应rng的值。Range(rng).formula对应rng的Excel公式。

Name分为两种,工作簿级和工作表级,可通过Book('bookname').names和Sheet('sheetname').names操作。Name的refers_to属性对应Excel公式,refers_to_range对应相应的Range。

在VBA中调用Python必须引入xlwings.bas,在VBA中调用RunPython('import model;model.functions')即可。

在Python中调用VBA,可在App,Book或Sheet中使用macro('macroname')来获得VBA macro函数。

Sharp、Chart、Picture等篇幅所限,不再介绍。

2 以文档管理为例

由于GUI程序天然的复杂性,即使使用了MVC技术,也难于应用在快速变化,且不需要特别严格管理的信息系统。而数据库过于笨重,在形成一套稳定,完整,容错,灵活性兼具的流程之前,使用扩展的Excel,可以显著减少人为操作的失误。用Excel所见即所得的特性,以及自带的编辑功能,加上Python,即可将一张Excel表格,变成简单,实用,扩展性大大加强的综合信息管理程序。

使用三张表管理文档,info存放文档项目信息,config存放配置和自动编号信息,log存放文档生成记录。数据以二维方式存放,每行为一个项目,每列为一种分项。在Excel中,把每一列定义为一个名称,xlwings自Excel操作数据时,先选定行,对每一个必须的名称,定位至该行,读取或写入数据,然后操作下一个。

数据查看、查询、修改,均在Excel中完成。

在防雷工作中,存在着大量中间文档,包括卷宗、受理通知书、受理回执、技术评价、核准审批表、审核证书、办结通知、送达回证、办结报告等。这些文档共享着项目名称、申报单位、项目地址、受理编号等等信息,若每次都手工编排,会浪费大量时间,通过使用xlwings和python docx模板库,可以自动生成这样的文档。

数据添加,由于文档需要自动编号,设置“创建项目文件夹”按纽,点击后自动编号,根据编号创建项目文件夹,添加受理日期等信息。如图1管理界面所示。

数据按行录入,录入完成后,可以点击“打印”按钮,呼出生成界面,如图2所示。选择相应文档后,点击“更新并打开”,可将相应信息通过事先設置好的模板(如图3所示),生成相应的docx文档(如图3所示),并自动保存,生成记录保存在log表中。

文档查看,使用vba功能实现文档查看。

3 总结与展望

本文利用xlwings扩展Excel,基本实现了对防雷文档的管理工作,可极大减少人为操作,以及人为操作带来的失误。由于python完善的基础库,丰富的web组件,下一步可配合使用微软VTSO技术,为Excel制订专用标签栏;在数据中包含geojson,配合flask等python Web框架,直观显示带地理信息的项目情况。

参考文献:

[1]薛江芸.EXCEL在中小企业会计工作中的应用和创新[J].价值工程,2013.

[2]费春梅.Excel在信息管理方面的应用[J].价值工程,2010,01.

[3]李晓玫,杨小平.Excel中的VBA程序设计[J].四川师范大学学报(自然科学版),2004(04).

[4]刘雍,李蕴.Excel的功能扩展方法初探[J].琼州学院学报,2007(05).

[5]马倩.电子表格在商务办公中的拓展应用研究[J].价值工程,2012(06).

猜你喜欢

扩展
多维传播语境下的播音主持功能与拓展研究
财务管理内容扩展的路径与方法
浅谈小学英语教学中的情境教学法