用 Python 处理 Excel 文件

96
lovexiaov
0.2 2015.12.14 22:02* 字数 646

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()方法将返回值的类型打印出来,方法我们对返回值的使用和处理。

0x03. 附:

openpyxl 参考文档:http://pan.baidu.com/s/1c1w77sk

Python Thinking
Web note ad 1