使用 Python 处理 Excel 文件

最近在学着使用 Python 解决些重复枯燥的工作,也给自己省些时间。比如每天从网站上摘抄几个数据然后制成 Excel。偶尔倒还好,要是每天都要这样,岂不是很浪费时间?像这种重复性的操作就可以交给不辞辛劳的计算机。
解决上面的需求主要分两步,一是从网上摘抄数据,根据不同的情况,摘抄数据的手段也各异。简单的直接curl一下然后正则,复杂点的可能需要抓包,或者爬虫,这里就不做展开(自己还在学……)。二是处理 Excel,今天就着重讲讲怎么处理 Excel。

Python 关于 Excel 的库主要有两个:Python-Excel(xlrd, xlwt, xlutils)和 OpenPyXL。前者主要用于 xls,后者用于 xlsx。现在多数文件都是 xlsx,且后者维护得很勤快,再加上 Automate the Boring Stuff with Python 也是用的 OpenPyXL,就愉快地决定用它了。

OpenPyXL

安装一句话,pip3 install openpyxl即可。

读文件

1
2
3
4
5
6
7
8
9
import openpyxl
# 读取 sample.xlsx 文件
wb = openpyxl.load_workbook('sample.xlsx')
# 打印 该文件所含有 sheet 的 name
print(wb.get_sheet_names()) # ['Sheet1', 'Sheet2']
# 获取当前使用的 sheet,默认使用第一个 sheet
active_sheet = wb.active
# 打印 A1 单元格的内容
print(active_sheet['A1'].value) # Hello, World!

写文件

1
2
3
4
5
6
7
# 新建 Workbook
wb = Workbook()
sheet = wb.active
# 设置单元格 A1 的值
sheet['A1'].value = 4
# 保存为 sample.xlsx 文件
wb.save("sample.xlsx")

字体

1
2
# 设置字体大小为24,斜体
sheet['A1'].font = Font(size=24, italic=True)

背景色

1
2
# 设置背景色为红色
sheet['A1'].fill = PatternFill(start_color=colors.RED, fill_type=fills.FILL_SOLID)

公式

1
sheet['B9'] = '=SUM(B1:B8)'

合并单元格

1
sheet.merge_cells('A1:D3')

最后,强烈推荐下 Automate the Boring Stuff with Python 这本书,真是形象说明了人生苦短,我用 Python这句口号。

参考

OpenPyXL Doc
Automate the Boring Stuff with Python - Working with Excel Spreadsheets
Working with Excel Files in Python