Python 中的 xlwings 库用来处理 Excel 非常好用,既能支持 xlsx 格式,也能支持 pandas 的 DataFrame,甚至还提供 REST API。用法上也简洁明了,下面说一说一些基本的读和写的操作
安装
pip install xlwings
如果在 conda 上安装的话,其官方的包会滞后,所以采用下面的命令会接近于 pip 的发布
conda install -c conda-forge xlwings
Windows 系统上还需要依赖 pywin32, comtypes 库,但 pip 和 conda 安装时会自动处理
读 Excel
xlwings 的一套逻辑关系是
App -> workbook(工作簿,我们打开的 Excel 文件)-> sheet(工作簿中的某一个编辑页)
所以创建的先后顺序也是先创建 App,再打开 workbook,再指定要读取的 sheet
# 推荐这样导入包
import xlwings as xw
# 创建 App,设置为不可见,代码处理时不希望看到界面被打开
app = xw.App(visible=False, add_book=False)
app.display_alerts = False
app.screen_updating = False
打开 workbook,这里要指定 xls 或者 xlsx 的文件路径
excel_path = 'xxx.xlsx'
workbook = app.books.open(excel_path)
遍历 sheet 的方式很简单,用 for 即可
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 的名字针对性的访问
sheet_name = 'test_excel'
sheet = workbook.sheets[sheet_name]
接下来,是访问 sheet 内具体的数据,在 xlwings 里使用 Range。按行访问时,第一行的下标是 1 不是 0,这跟编程语言的习惯不一样
index = 1
_value_A1 = sheet.range('A' + str(index)).value
_value_B2 = sheet.range('B2').value
循环的遍历某一列
for index in range(1, 10):
sheet.range('A' + str(index)).value
读取一个区域的数据
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 保证每次都会关闭
try:
# do-something-here
finally:
workbook.close()
app.quit()
写 Excel
写数据的基本操作主要涉及创建 workbook,sheet,添加数据,保存数据。当初始化 App 实例后,通过 add 方式来新建工作簿
new_workbook = app.books.add()
此时创建的工作簿默认带名字为 Sheet1 的 sheet,修改名字通过以下方式
# 通过访问序号的方式改名
new_sheet_name = 'new_sheet'
new_workbook.sheets[0].name = new_sheet_name
# 通过访问名字的方式改名
new_workbook.sheets['Sheet1'].name = new_sheet_name
添加新的 sheet
# 添加默认名字的 sheet
new_workbook.sheets.add()
# 添加指定名字的 sheet
a_name = 'a_name'
new_workbook.sheets.add(a_name)
修改数据,直接对 value 赋值
# 修改 value 的值
index = 1
sheet.range('A' + str(index)).value = 'new_value'
保存新的工作簿
_path = 'xxxxx.xlsx'
new_workbook.save(_path)
# 不添加路径的 save,类似于 ctrl + S
new_workbook.save()
除此之外,xlwings 还可以把 plt 画的图粘贴到表格中
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 和功能的使用方法建议查询官网 https://docs.xlwings.org/en/stable/