【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的更多相关文章

  1. 数据报表之Excel操作模块

    Excel是当今最流行的电子表格处理软件,支持丰富的计算函数及图表,在系统运营方面广泛用于运营数据报表,比如业务质量.资源利用.安全扫描等报表,同时也是应用系统常见的文件导出格式,以便数据使用人员做进 ...

  2. Python:目录和文件的操作模块os.path和OS常用方法

    1.目录和文件的操作模块os.path,在使用之前要先导入:import os.path.它主要有以下几个重要的功能函数: #!/user/bin/python #coding= utf-8 impo ...

  3. python运维开发常用模块(8)EXCEL操作模块XlsxWriter

    1.excel介绍 Excel是当今最流行的电子表格处理软件,支持丰富的计算函数及 图表,在系统运营方面广泛用于运营数据报表,比如业务质量.资源利 用.安全扫描等报表,同时也是应用系统常见的文件导出格 ...

  4. Python基础学习七 Excel操作

    python操作excel,python操作excel使用xlrd.xlwt和xlutils模块, xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的. ...

  5. python基础——15(加密、excel操作、ini文件操作、xml操作模块及数据格式分类)

    一.加密模块 1.有解密的加密方式(base64) #base64加密 import base64 str_encrypt = input("输入要加密的字符串:\n") base ...

  6. python——使用xlwing库进行Excel操作

    Excel是现在比不可少的数据处理软件,python有很多支持Excel操作的库,xlwing就是其中之一. xlwings的安装 xlwings库使用pip安装: 在控制台输入 pip instal ...

  7. python读写word、excel、csv、json文件

    http://blog.csdn.net/pipisorry/article/details/50368044 python读写word文档 (include wps)将word文档转换成txt文档 ...

  8. python制作简单excel统计报表2之操作excel的模块openpyxl简单用法

    python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...

  9. python操作excel之 模块 xlrd

    xlrd是专门用来在python中读取微软execel的模块,可以自己直接下载安装,也可以通过包管理器安装. 官方资料: 下载地址:http://pypi.python.org/pypi/xlrd 官 ...

随机推荐

  1. python︱Anaconda安装、简介(安装报错问题解决、Jupyter Notebook)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 安装完anaconda,就相当于安装了Pyth ...

  2. GOF23种设计模式精解

    创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton( ...

  3. file_get_contents函数不能使用的解决方法

    今天开发微信公众平台的时候 使用file_get_contents 去获得token 结果一直返回false.百度了一下,大部分都是说用curl 偶然发现可能是openssl没有开启的问题,开启ope ...

  4. Linux 系统裁剪笔记1

    1.什么裁剪? 本篇文章的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统.下面,让我们来实现吧..写的不好 ...

  5. R语言︱用excel VBA把xlsx批量转化为csv格式

    笔者寄语:批量读取目前看到有以下几种方法:xlsx包.RODBC包.批量转化成csv后读入.本章来自博客:http://www.cnblogs.com/weibaar/p/4506144.html 在 ...

  6. Java Web项目(Extjs)报错二

    1.Java Web项目(Extjs)报错二 具体报错如下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ...

  7. SQL语句报错(一)

    SQL语句报错(一) 1.具体报错如下: ORA-01861:文字格式字符串不匹配 01861. 00000 - "literal does not match format string& ...

  8. java.lang.NoClassDefFoundError:org/hamcrest/SelfDescribing

    1.错误描述 java.lang.NoClassDefFoundError:org/hamcrest/SelfDescribing 2.错误原因 将junit-4.11.jar导入到lib目录中,出现 ...

  9. tar (child): jdk-7u71-linux-x64.tar.gz:无法 open: 没有那个文件或目录

    1 错误描述 youhaidong@youhaidong:~$ sudo mkdir /usr/lib/jvm [sudo] password for youhaidong: youhaidong@y ...

  10. 前端(HTML/CSS/JS)-HTML编码规范

    一.HTML编码规范 1. img标签要写alt属性 根据W3C标准,img标签要写alt属性,如果没有就写一个空的.但是一般要写一个有内容的,根据图片想要表达的意思,因为alt是在图片无法加载时显示 ...