0x00. 前言
最近工作中有个处理 Excle 数据的需求,正好拿 Python 来练练手。简单搜了下,发现一个好网站:www.python-excel.org(可能需要爬墙头,请自理~),网站中介绍了几种开源的 Excel 处理框架,本文选择了排在第一位的openpyxl。
python-excel.org
0x01. 使用
虽然是一个开源工具,它却拥有详细的文档参考,打不开也没关系,文章末尾会给出 PDF 格式下载链接。下面就来介绍该工具的基本使用。
使用环境
Mac OS X 10.11.2
Python 2.7.11
安装
如果你使用 Mac 或者 Linux 系统,那么安装将特别简单:
$ pip install openpyxl
有同学会问,如果没有 pip 或 windows 系统咋办啊?简单!可以从这里下载源码安装。下载并解压后,进入到解压目录,执行:
$ python setup.py install
使用
安装完毕后就可以使用了,先简单介绍一下,该工具有几个主要的类:
Workbook: 代表一个 Excel 文件(工作簿)。
Worksheet: 代表 Excel 文件中的一个工作表。
Cell: 代表一个单元格。
好了,知道了这几个类的含义后,使用就比较简单了:
a) 创建 Excel
from openpyxl import Workbook
# 创建 Excel 对象
wb = Workbook()
# 保存成文件
wb.save('test.xlsx')
这样就创建了一个空的、名为test.xslx的工作簿。
b) 加载一个已存在的 Excel
from openpyxl import load_workbook
wb = load_workbook('test.xlsx')
这样就加载了一个名为test.xlsx的 Excel 文件。
c) 操作工作表
# 获取 Excel 打开后默认的工作表
default_ws = wb.active
# 创建一个新工作表
new_ws = wb.create_sheet(title='new ws')
# 修改工作表的名称
new_ws.title = 'modified ws'
# 迭代工作表中所有行
for row in new_ws.iter_rows():
pass
d) 操作单元格
# 给 "F5” 单元格赋值
new_ws['F5'] = 'test'
new_ws['F5'].value = 'hello'
# 取出 "F5” 单元格的值
print(new_ws['F5'].value)
# 得到单元格对象
from openpyxl.cell import Cell
c = Cell(new_ws)
f5 = new_ws['F5']
以上就是对 Excel对象的基本操作了,但在使用中,我们总会有各种需求,比如:在一些行后添加数据,我们使用new_ws.iter_rows()返回的是一个 tuple 对象,这时,我们需要用list()函数先将其转化为 list 对象,添加数据后再写入文件:
from openpyxl.cell import Cell
for row in new_ws.iter_rows():
data = list(row)
c = Cell(new_ws)
c.value = 'hello'
data.append(c)
other_ws.append(data)
0x02. 小结
openpyxl 的相当强大,还支持操作 Excel 中的图表等高级功能。由于工作中没有用到,就没有去研究,感兴趣的同学可以去看看。
最后分享一点使用 Python 开源工具的小技巧:
由于 Python 中动态语言,有时候很难判断一个方法返回的数据类型,我们可以经常使用type()方法将返回值的类型打印出来,方法我们对返回值的使用和处理。