【Python】 更棒的Excel操作模块xlwings
【xlwings】
说到Python操作Excel,有好多模块都可以支持这个工作。比如最底层的win32模块不仅可以操作Excel,还可以操作其他一众windows的软件。
其他的比较熟悉的有xlrd,xlwt和xlutils这三个。分别负责Excel文件的读、写、读写转换工作。虽然一般情况下的Excel操作都可以通过这三个模块来完成,但是还是有很多不便的地方。比如单元格格式的写入和读取很麻烦,通过xlutils将一个Excel读取再写入到一个新文件中时格式也不会被一起复制过去。
另外最近我遇到的需求就是,基于一个Excel模板,往里面填充数据。虽然可以将模板转化为xlwt的代码写死在生成脚本中,但是每次都要重新生成一个文件未免太过麻烦,而且一个格子一个格子地写入会让代码量飞速上涨。。无奈之下另寻他路,尝试着用了xlwings这个模块。
■ 基本使用
和xlrd等不同,xlwings设计的基础理念不是面向单个的Excel文档进行的,而是可以处理一个包含了多个Excel文档的“Excel项目”。通过建立其app等逻辑组分概念,可以让整个Excel项目可以更加有序方便地进行计算和互相通讯。xlwings中设计的各个模型的概念层级如下图所示:
其中App是作为一个逻辑的分组,一个Book可以认为对应一个Excel文档,Sheet对应一张工作表,Range对应具体表中的一片区域的内容。首先,下面是一个最为常见的,打开一个Excel文档并进行处理的简单过程:
import xlwings as xw book = xw.Book('/path/to/test.xlsx')
# 此时界面上会弹出Excel窗口,如果test.xlsx文件不存在则会报错,如果test.xlsx已经被打开,直接返回这个文件对象 print book.name,book.fullname # 打印文件名和绝对路径
print book.app # 可以查看book所在哪个APP
print book.sheets # 又是一个类列表结构,存放各种Sheet对象
book.activate() # 如果Excel没有获得当前系统的焦点,调用这个方法可以回到Excel中去
book.close() # 关闭Excel文档,但只是关闭文件本身,不关闭excel程序。。若要关闭Excel程序则需要调用响应APP实例的kill方法。经过试验,先调用close会导致默认创建的app实例自动消失,从而无法调用kill,从而关不掉Excel
所以最好的办法不是调用这个close而是调用app.kill()。
sheet = book.sheets[0]
# 其他获取sheet对象的方法还有book.sheets['sheet_name']
上面说到了获取一个具体的sheet,然一个sheet可以调用的方法有:
sheet.activate sheet.charts sheet.index
sheet.api sheet.clear sheet.name
sheet.autofit sheet.clear_contents sheet.names
sheet.book sheet.delete sheet.pictures
sheet.cells sheet.impl sheet.range
...等等
其中activate,autofit,cliear_content等这些方法都还挺有意思的。最为核心的方法应该就是range了,通过它可以获取到具体的某一段范围的数据。
例如sheet.range('A1')获取到A1单元格的对象,通过调取此对象的value属性,就可以读取/改变单元格的值,并且这一切都不会影响单元格本身的格式。
更加imba的一种做法是sheet.range('A1:C3')这样的形式可以一次性获取到一个区域内所有单元格的对象。调取其value对象的话得到的也是一个二维列表形式的数据集合,可以形象方便地把Excel中的数据映射到python中来。对于设置数据时,传入数据可以是一个不符合指出区域规定的结构,但是这样结果会比较微妙。。建议实验
需要指出的是和xlrd一样,读取value时合并单元格只在其左上角的子单元格中有值,其余的和未填写的单元格一样,都是None。
■ 对于range,能做的还有更多
除了简单的调用value和为value赋值来读写Excel外,还有如下接口可以使用
range.add_hyperlink range.clear_contents range.count
range.address range.color range.current_region
range.api range.column range.end
range.autofit range.column_width range.expand
range.clear range.columns range.formula
...等等
一些接口的用法提示:
range.add_hyperlink('https://www.baidu.com','百度')
range.color = (128,128,128) RGB通道颜色,可获取or设置
range.row/column 获取第几行/列,注意是第几而不是下标
range.formula 可以设置计算表达式,用来进行表内计算
range.current_region 返回当前range所在区域的区域表达,这个比较难描述,好比一个Excel中互相连接的单元格都是连城一片,两个片之间没有任何相邻就是互相独立的。
range.count 返回这个range中共有多少单元格,合并单元格仍然按未合并的算
range.offset(a,b) 获取到当前range向右a格,向下移动b格同样大小的那片区域,ab可以为负值
range.rows/columns 返回行/列的各个range对象
■ 关于App
其实App还没有仔细研究过,简单来说,当通过xw.Book创建一个实例的时候,默认向xw.apps中添加一个App实例,而book就属于这个App。
如上面所说,解决Excel程序无法关闭的问题可以用这个app实例的kill方法。app.kill()可以把Excel程序连同文件一并关闭。另外,如果不想让Excel程序跳出来则可以置app.visible=False,即时设置即时生效。
由于通常我们的操作基于Book类对象,当完成操作book.save之后,如果想要关掉Excel,可以调用book.app.kill()或者book.app.quit(),但在这之前不要book.close(),否则会报错哦。(推荐使用quit,使用kill的话有些excel打开软件比如WPS会记录下非正常的退出状态,当再次打开这个文档的时候就会报错说有错误。如果第二次仍然使用xlwings打开,而错误提示的对话框占据了焦点,会使得xlwings无法正常使用)。
【Python】 更棒的Excel操作模块xlwings的更多相关文章
- 数据报表之Excel操作模块
Excel是当今最流行的电子表格处理软件,支持丰富的计算函数及图表,在系统运营方面广泛用于运营数据报表,比如业务质量.资源利用.安全扫描等报表,同时也是应用系统常见的文件导出格式,以便数据使用人员做进 ...
- Python:目录和文件的操作模块os.path和OS常用方法
1.目录和文件的操作模块os.path,在使用之前要先导入:import os.path.它主要有以下几个重要的功能函数: #!/user/bin/python #coding= utf-8 impo ...
- python运维开发常用模块(8)EXCEL操作模块XlsxWriter
1.excel介绍 Excel是当今最流行的电子表格处理软件,支持丰富的计算函数及 图表,在系统运营方面广泛用于运营数据报表,比如业务质量.资源利 用.安全扫描等报表,同时也是应用系统常见的文件导出格 ...
- Python基础学习七 Excel操作
python操作excel,python操作excel使用xlrd.xlwt和xlutils模块, xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的. ...
- python基础——15(加密、excel操作、ini文件操作、xml操作模块及数据格式分类)
一.加密模块 1.有解密的加密方式(base64) #base64加密 import base64 str_encrypt = input("输入要加密的字符串:\n") base ...
- python——使用xlwing库进行Excel操作
Excel是现在比不可少的数据处理软件,python有很多支持Excel操作的库,xlwing就是其中之一. xlwings的安装 xlwings库使用pip安装: 在控制台输入 pip instal ...
- python读写word、excel、csv、json文件
http://blog.csdn.net/pipisorry/article/details/50368044 python读写word文档 (include wps)将word文档转换成txt文档 ...
- python制作简单excel统计报表2之操作excel的模块openpyxl简单用法
python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...
- python操作excel之 模块 xlrd
xlrd是专门用来在python中读取微软execel的模块,可以自己直接下载安装,也可以通过包管理器安装. 官方资料: 下载地址:http://pypi.python.org/pypi/xlrd 官 ...
随机推荐
- Maven就是这么简单
什么是Maven Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一 ...
- java注解之二
从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用Annotation,开发人员可 ...
- [PHP开发] phpmailer问题 错误原因: Could not instantiate mail function
Send via the PHP mail() function function mail_send($header, $body) { // Create mail recipient list ...
- MTBF
MTBF,即平均故障间隔时间,英文全称是"Mean Time Between Failure".是衡量一个产品(尤其是电器产品)的可靠性指标.单位为"小时".它 ...
- Java中对整数格式化
Java中对整数格式化 1.说明 对整数进行格式化:%[index$][标识][最小宽度]转换方式 2.实例分析 (1)源码 /** * 1. 对整数进行格式化:%[index$][标识][最小 ...
- RHCE6.4 rpm 安装gcc
先将gcc的iso里的Packages拷贝到根目录下,方便以后使用,再找gcc的rpm包安装: 网上说有以下依赖,需要按照一下顺序安装: rpm -ivh cpp*****.rpm rpm -ivh ...
- Hibernate【与Spring整合】
前言 前面已经学习了如何使用Spring与Struts2进行整合,本博文主要讲解如何使用Spring对Hibernate进行整合 Spring和Hibernate整合的关键点: SessionFact ...
- Html行内元素和块级元素
1.关于行内元素和块状元素的说明 根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display ...
- BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案)
BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案) 题意 : 给你一个长为\(R\)宽为\(C\)的矩阵,第\(i\)行\(j\)列的数为\(P_{i,j}\). 有\(m\)次 ...
- 【BZOJ2428】均分数据(模拟退火)
[BZOJ2428]均分数据(模拟退火) 题面 BZOJ 题解 先说说黄学长的做法: 当温度比较高的时候,贪心 每次随机一个数,把他放进当前和最少的那一组里面 温度足够低的时候就完全随机然后转移 这样 ...