Python 中的 xlwings 库用来处理 Excel 非常好用,支持高版本的 xlsx 格式,也能支持 pandas 的 DataFrame,甚至还提供 REST API。用法上也简洁明了,下面说一说一些基本的读和写的操作
安装
在 conda 上安装,由于直接 install 的话,官方的包会滞后,所以采用下面的命令会接近于 pip 的发布
1
| conda install -c conda-forge xlwings
|
Windows 系统上还需要依赖 pywin32, comtypes 库,但 pip 和 conda 安装时会自动处理
读 Excel
xlwings 的一套逻辑关系是
App -> workbook(工作簿,我们打开的 Excel 文件)-> sheet(工作簿中的某一个编辑页)
所以创建的先后顺序也是先创建 App,再打开 workbook,再指定要读取的 sheet
1 2 3 4 5 6 7
| # 推荐这样导入包 import xlwings as xw
# 创建 App,设置为不可见,代码处理时不希望看到界面被打开 app = xw.App(visible=False, add_book=False) app.display_alerts = False app.screen_updating = False
|
打开 workbook,这里要指定 xls 或者 xlsx 的文件路径
1 2
| excel_path = 'xxx.xlsx' workbook = app.books.open(excel_path)
|
遍历 sheet 的方式很简单,用 for 即可
1 2 3 4 5
| for sheet in workbook.sheets: print('sheet name is{}'.format(sheet.name))
fori i in range(len(workbook.sheets)): print('sheet name is{}'.format(workbook.sheets[i]))
|
还可以指定 sheet 的名字针对性的访问
1 2
| sheet_name = 'test_excel' sheet = workbook.sheets[sheet_name]
|
接下来,是访问 sheet 内具体的数据,在 xlwings 里使用 Range。按行访问时,第一行的下标是 1 不是 0,这跟编程语言的习惯不一样
1 2 3 4
| index = 1 _value_A1 = sheet.range('A' + str(index)).value
_value_B2 = sheet.range('B2').value
|
循环的遍历某一列
1 2
| for index in range(1, 10): sheet.range('A' + str(index)).value
|
读取一个区域的数据
1 2 3 4 5 6
| values = sheet.range('A1:C3').value
# 输出这个区域的矩阵 list [['Pos', 'Name', 'Ct SYBR'], ['A1', '6A1-IL10', 21.9], ['A2', '6A1-IL10', 21.99]]
|
如果是空的单元格,返回的 value=None
没有关闭工作簿时,手动打开这个表格会提示已经锁定了

所以及时关闭,最好在使用的块外用 try-finally 保证每次都会关闭
1 2 3 4 5
| try: # do-something-here finally: workbook.close() app.quit()
|
写 Excel
写数据的基本操作主要涉及创建 workbook,sheet,添加数据,保存数据。当初始化 App 实例后,通过 add 方式来新建工作簿
1
| new_workbook = app.books.add()
|
此时创建的工作簿默认带名字为 Sheet1 的 sheet,修改名字通过以下方式
1 2 3 4 5 6
| # 通过访问序号的方式改名 new_sheet_name = 'new_sheet' new_workbook.sheets[0].name = new_sheet_name
# 通过访问名字的方式改名 new_workbook.sheets['Sheet1'].name = new_sheet_name
|
添加新的 sheet
1 2 3 4 5 6
| # 添加默认名字的 sheet new_workbook.sheets.add()
# 添加指定名字的 sheet a_name = 'a_name' new_workbook.sheets.add(a_name)
|
修改数据,直接对 value 赋值
1 2 3
| # 修改 value 的值 index = 1 sheet.range('A' + str(index)).value = 'new_value'
|
保存新的工作簿
1 2 3 4 5
| _path = 'xxxxx.xlsx' new_workbook.save(_path)
# 不添加路径的 save,类似于 ctrl + S new_workbook.save()
|
除此之外,xlwings 还可以把 plt 画的图粘贴到表格中
1 2 3 4 5 6 7 8
| import matplotlib.pyplot as plt
fig = plt.figure() plt.plot([1, 2, 3])
sheet = workbook.sheets[0] sheet.pictures.add(fig, name='plot', update=True) workbook.save('picture.xlsx')
|
打开 picture.xlsx

今天分享了 xlwings 库在 Python 中处理 Excel 的基本操作,实现数据的读写掌握上面的内容基本足够了,我根据上面的内容,实现了一个处理数据的需求交付业务测试使用,更多 API 和功能的使用方法建议查询官网,网上很多博客写的东西太简单,写得也不怎么样