Python中操作Excel 2000的xlsx文件(使用openpyxl)

###########################################

在工作中,我们经常需要将数据导出成表格的形式。常见的cvs格式(使用逗号分隔),虽然生成简单,但难免存在以下问题:

1、需要对文本中的逗号进行转义,特别是当文本中需要保留逗号的时候,往往无能为力。

2、字符编码问题,对于Office的一些版本,直接打开utf8编码的cvs,可能会出现乱码。因此,依然需要将cvs另存为Excel格式,才能方便使用。

下面我们介绍开源模块openpyxl,它能够帮助我们在Python中,直接操作Excel 2000文件格式(xlsx)。

###################################################

 

1 下载地址http://download.csdn.net/detail/kernelke/5192910

2 下载文件openpyxl-1.6.1.tar.gz

3 解压到任意路径下,例如:解压后的路径为C:\openpyxl-1.6.1

4 安装

打开window窗口输入以下:

cd C:\openpyxl-1.6.1

python setup.py install

 

 

5 简单使用

直接在shell下面把玩一下
>>> from openpyxl.reader.excel import load_workbook #包导入
>>> wb = load_workbook(filename=r'C:/test.xlsx')#打开文件
>>> print "Worksheet ranges(s):",wb.get_named_ranges()
Worksheet ranges(s): []
>>> print "Worksheet names(s):",wb.get_sheet_names()
Worksheet names(s): ['Sheet1', 'Sheet2', 'Sheet3']
>>> sheetnames = wb.get_sheet_names()
>>> ws = wb.get_sheet_by_name(sheetnames[0]) #打开sheet1
>>> for rx in range(ws.get_highest_row()): #对第一个column遍历打印值
        print ws.cell(row=rx,column=0).value

 

 

二、解析、读取xlsx文件

1、从xlsx到工作表(worksheet)

我们知道,一个Excel文件称作一个workbook。在它之中,可以包含多个worksheet(工作表)。

我们先来看一下如何定位到工作表。假设我们的Excel文件如下:

xlsx_1

下述代码,将列出所有worksheet:

将会一数组的形式,输出所有表名:

我们在关闭xlsx的时候,会保存当前活动的worksheet。get_active_sheet返回的是一个WorkSheet对象,用它可以操控具体的工作簿,后文会提到。在这里,我们打印其title属性即标题:

除了上述方法,我们也可以通title,直接选择worksheet:

2、读取工作表中的内容

openpyxl的强大之处在于:支持使用’A2′、’D10′这种Excel的坐标格式,直接定位单元格。

我们用于测试的Excel中,预设了如下内容:

xlsx_2

下面,我们直接获取Cell中的值

我们可以注意到,中文被直接输出为了UTF8(我的测试环境为Linux、LC为UTF8)。

如果只是为了获取所有的Cell,不考虑其顺序,可以直接使用collection:

当然,再更多的时候,我们希望按照行、列遍历表格。

openpyxl除了支持’A3′这种直接定位,也可以通过行、列定位Cell。而行、列可以通过get_highest_*函数获得。下述代码,展示了按照行、列顺序,打印Cell

输出为:

这里需要注意一个细节,对于单元格“李四”,数字下标定位为:row=2,col=1;字母定位为“B3”。

也就是说,row, col定位,下标都是从0开始。而字母方式,行从1开始,列从A开始。

在使用中,一定要注意这一点!

三、修改工作表

1、新增行、列

下述代码在列A下,新增一行:

下述代码,新增一列D,并新增一行

2、直接指定行列

更多的时候,我们直接设定单元格的值。

下面的代码,将在excel中打印9* 9 乘法口诀。

我们可以发现,设定cell也是用的cell函数。set_value_explicit的data_type应该是支持设定cell类型的,遗憾的是,我在使用中发现该设定不管用。

修改完后,需要保存,这需要用到我们最开始使用的work_book对象:

四、其他

在默认情况下,openpyxl会将整个xlsx都读入到内存中,方便处理。

这使得操作大文件的时候,速度较慢,可以使用Optimized reader和Optimized writer。它们提供了流式的接口,速度更快。

更多的API、使用方法,可以参考官方文档:http://pythonhosted.org/openpyxl/api.html

转载于:https://www.cnblogs.com/jane0912/p/4195253.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值