来源:早起Python
作者:陈熹、刘早起
大家好,我是早起。
在之前的文章中我们曾详细的讲解了如何使用openpyxl 操作Excel,其实在Python中还有其他可以直接操作 Excel 文件的库,
如 xlwings、xlrd、xlwt 等等,本文就将讲解另一个优秀的库xlwings
开头还是想说一下,各个库之间没有明确的好坏之分,每个库都有其适合的应用场景,
并且xlwings 和 openpyxl 许多区别决定了它们的能力是互为补充:
“
xlwings:需要安装有 Excel 软件,支持 .xls和 .xlsx 格式;可以调用 Excel 文件中 VBA 写好的程序;
和 matplotlib 以及 pandas 的兼容性强
openpyxl:不需要 Excel 软件,仅支持 .xlsx 格式
”
xlwings 是一个非标准库,需要在命令行中安装,在终端(Mac)/命令行(Win)使用pip安装即可,一般不会出现什么问题。
pip install xlwings
对 xlwings 的核心理解就在于下面这张图:
可以看到,和 xlwings 直接对接的是 apps,也就是 Excel 应用程序,然后才是 工作簿 books 和工作表 sheets,这点和 openpyxl 有较大区别,也正是因为此,xlwings 需要依然安装有 Excel 应用程序的环境
使用app打开
import xlwings as xw
app = xw.App(visible=True, add_book=False) # 程序可见,只打开不新建工作薄 app.display_alerts = False
# 警告关闭 app.screen_updating = False # 屏幕更新关闭
这里需要注意,因为 xlwings 是以程序 apps 作为初级操作对象,因此开始和最后都是基于 app 的开和关
path = r"C:Scientific ResearchPython" wb = app.books.open(path + r'practice.xlsx')
wb.save() # 保存文件 wb.close() # 关闭文件 app.quit() # 关闭程序
打开表格又分一下两种情况,即 固定 和 活动:
xw.Book(path + r'practice.xlsx') # 固定打开表格 xw.books.open(path + r'practice.xlsx') #
频繁打开表格
固定和频繁打开涉及到一个概念,称活动对象,它使 xlwings 的操作更显灵活:
# 活动应用程序 app = xw.apps.active # 活动工作簿 wb = xw.books.active
# 在活动app wb = app.books.active # 在特定app # 活动工作表 sheet = xw.sheets.active
# 在活动工作簿 sheet = wb.sheets.active # 在特定工作簿 # 活动工作表的Range xw.Range('A1')
无论是新建还是打开都记得保存工作簿、关闭工作簿、关闭程序
path = r"C:Scientific ResearchPython" wb = app.books.add()
wb.save(path + r'new_practice.xlsx')
wb.close()
app.quit()
示例文件 practice.xlsx 如下:
下面的代码部分不再显示程序的开闭代码,利于直观看到重点:
path = r"C:Scientific ResearchPython" wb = app.books.open(path + r'practice.xlsx') #
类似 openpyxl 中的 sheet = workbook.active sheet = wb.sheets.active #
获取单个单元格的值 A1 = sheet.range('A1').value
print(A1) # 获取横向或纵向多个单元格的值,返回列表 A1_A3 = sheet.range('A1:A3').value
print(A1_A3) # 获取给定范围内多个单元格的值,返回嵌套列表,按行为列表 A1_C4 = sheet.range('A1:C4').value
print(A1_C4)
在 xlwings 中,可以通过 sheet.range 获取一个或多个单元格进行操作,另外也可以不用 sheet.range 获取:
# 获取单个单元格的值 A1 = sheet['A1'].value print(A1) # 获取横向或纵向多个单元格的值,返回列表 A1_A3
= sheet['A1:A3'].value print(A1_A3) # 获取给定范围内多个单元格的值,返回嵌套列表,按行为列表 A1_C4
= sheet['A1:C4'].value print(A1_C4)
无论是单个单元格还是多个单元格,可以用 .value直接获取,输出结果和使用 .range 完全一致,也避免了类似 openpyxl
对于多个单元格需要再建立循环遍历才能获取值。
还有一种类似 pandas 切片获取范围内所有值的方法:
sheet = wb.sheets.active A1_B2 = sheet[:2, :2].value print(A1_B2)
以下为写入 1 个单元格、一行或一列写入多个单元格、写入范围内多个单元格代码
# 写入 1 个单元格 sheet.range('A2').value = '大明' # 一行或一列写入多个单元格 #
横向写入A1:C1 sheet.range('A1').value = [1,2,3] # 纵向写入A1:A3 sheet.range('A1').options(transpose=True).value =
[1,2,3] # 写入范围内多个单元格 sheet.range('A1').options(expand='table').value = [[1,2,3], [4,5,6]]
例如,如果要给 practice.xlsx 添加一行新的记录,代码如下:
import xlwings as xw
app = xw.App(visible=True, add_book=False)
app.display_alerts = False app.screen_updating = False path = r"C:Scientific ResearchPython" wb
= app.books.open(path + r'practice.xlsx')
sheet = wb.sheets.active
sheet.range('A5').value = ['小兰', 23, '女']
wb.save()
wb.close()
app.quit()
有两种方法实现
# 方法一 shape = sheet.used_range.shape print(shape) # 方法二 nrow = sheet.api.UsedRange.Rows.count
ncol = sheet.api.UsedRange.Columns.count print(nrow) print(ncol)
# 输出 print(sheet.range('A1:A2').row_height) print(sheet.range('A1:A2').column_width)
# 修改
sheet.range('A1:A2').row_height = 15 sheet.range('A1:A2').column_width = 10
可以调用Excel公式,这是pandas无法完成的
# 获取公式 print(sheet.range('B2').formula_array) # 写入公式 sheet.range('B2').formula='=SUM(A1,A2)'
当然类似openpyxl等样式修改也是支持的
# 获取颜色 print(sheet.range('C1').color) # 设置颜色 sheet.range('C1').color = (255, 0, 120) #
清除颜色 sheet.range('C1').color = None
以上仅是针对一些常用操作给出代码示例与讲解,更多的操作可以阅读官方文档,大家也可以自己对比一下
xlwings和其他库在部分操作上的异同。未来我们也会更新基于xlwings的办公自动化案例!
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
数据分析在当今信息时代发挥着重要作用。单因素方差分析(One-Way ANOVA)是一种关键的统计方法,用于比较三个或更多独立样本组 ...
2025-04-25CDA持证人简介: 居瑜 ,CDA一级持证人国企财务经理,13年财务管理运营经验,在数据分析就业和实践经验方面有着丰富的积累和经 ...
2025-04-25在当今数字化时代,数据分析师的重要性与日俱增。但许多人在踏上这条职业道路时,往往充满疑惑: 如何成为一名数据分析师?成为 ...
2025-04-24以下的文章内容来源于刘静老师的专栏,如果您想阅读专栏《刘静:10大业务分析模型突破业务瓶颈》,点击下方链接 https://edu.cda ...
2025-04-23大咖简介: 刘凯,CDA大咖汇特邀讲师,DAMA中国分会理事,香港金管局特聘数据管理专家,拥有丰富的行业经验。本文将从数据要素 ...
2025-04-22CDA持证人简介 刘伟,美国 NAU 大学计算机信息技术硕士, CDA数据分析师三级持证人,现任职于江苏宝应农商银行数据治理岗。 学 ...
2025-04-21持证人简介:贺渲雯 ,CDA 数据分析师一级持证人,互联网行业数据分析师 今天我将为大家带来一个关于用户私域用户质量数据分析 ...
2025-04-18一、CDA持证人介绍 在数字化浪潮席卷商业领域的当下,数据分析已成为企业发展的关键驱动力。为助力大家深入了解数据分析在电商行 ...
2025-04-17CDA持证人简介:居瑜 ,CDA一级持证人,国企财务经理,13年财务管理运营经验,在数据分析实践方面积累了丰富的行业经验。 一、 ...
2025-04-16持证人简介: CDA持证人刘凌峰,CDA L1持证人,微软认证讲师(MCT)金山办公最有价值专家(KVP),工信部高级项目管理师,拥有 ...
2025-04-15持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。在实际生活中,我们可能会 ...
2025-04-14在 Python 编程学习与实践中,Anaconda 是一款极为重要的工具。它作为一个开源的 Python 发行版本,集成了众多常用的科学计算库 ...
2025-04-14随着大数据时代的深入发展,数据运营成为企业不可或缺的岗位之一。这个职位的核心是通过收集、整理和分析数据,帮助企业做出科 ...
2025-04-11持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。 本次分享我将以教培行业为 ...
2025-04-11近日《2025中国城市长租市场发展蓝皮书》(下称《蓝皮书》)正式发布。《蓝皮书》指出,当前我国城市住房正经历从“增量扩张”向 ...
2025-04-10在数字化时代的浪潮中,数据已经成为企业决策和运营的核心。每一位客户,每一次交易,都承载着丰富的信息和价值。 如何在海量客 ...
2025-04-09数据是数字化的基础。随着工业4.0的推进,企业生产运作过程中的在线数据变得更加丰富;而互联网、新零售等C端应用的丰富多彩,产 ...
2025-04-094月7日,美国关税政策对全球金融市场的冲击仍在肆虐,周一亚市早盘,美股股指、原油期货、加密货币、贵金属等资产齐齐重挫,市场 ...
2025-04-08背景 3月26日,科技圈迎来一则重磅消息,苹果公司宣布向浙江大学捐赠 3000 万元人民币,用于支持编程教育。 这一举措并非偶然, ...
2025-04-07在当今数据驱动的时代,数据分析能力备受青睐,数据分析能力频繁出现在岗位需求的描述中,不分岗位的任职要求中,会特意标出“熟 ...
2025-04-03