Python 处理 Excel,就用 xlwings

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/

发布了27 篇原创文章 · 获赞 3 · 访问量 5653

猜你喜欢

转载自blog.csdn.net/candyngwh/article/details/105282771