来源:早起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的办公自动化案例!
数据分析咨询请扫描二维码
数字化转型是企业提升竞争力和实现可持续发展的关键路径。面对快速变化的市场环境,以及技术的飞速发展,企业在数字化转型过程中 ...
2024-11-15CDA数据分析师认证:CDA认证分为三个等级:Level Ⅰ、Level Ⅱ和Level Ⅲ,每个等级的报考条件如下: Le ...
2024-11-14自学数据分析可能是一条充满挑战却又令人兴奋的道路。随着数据在现代社会中的重要性日益增长,掌握数据分析技能不仅能提升你的就 ...
2024-11-14数据分析相关职业选择 数据分析领域正在蓬勃发展,为各种专业背景的人才提供了丰富的职业机会。从初学者到有经验的专家,每个人 ...
2024-11-14数据挖掘与分析在金融行业的使用 在当今快速发展的金融行业中,数据挖掘与分析的应用愈发重要,成为驱动行业变革和提升竞争力的 ...
2024-11-14学习数据挖掘需要掌握哪些技能 数据挖掘是一个不断发展的领域,它结合了统计学、计算机科学和领域专业知识,旨在从数据中提取有 ...
2024-11-14统计学作为一门基于数据的学科,其广泛的应用领域和多样的职业选择,使得毕业生拥有丰厚的就业前景。无论是在政府还是企业,统计 ...
2024-11-14在当今高速发展的技术环境下,企业正在面临前所未有的机遇和挑战。数字化转型已成为企业保持竞争力和应对市场变化的必由之路。要 ...
2024-11-13爬虫技术在数据分析中扮演着至关重要的角色,其主要作用体现在以下几个方面: 数据收集:爬虫能够自动化地从互联网上抓取大量数 ...
2024-11-13在数据分析中,数据可视化是一种将复杂数据转化为图表、图形或其他可视形式的技术,旨在通过直观的方式帮助人们理解数据的含义与 ...
2024-11-13在现代银行业中,数字化用户行为分析已成为优化产品和服务、提升客户体验和提高业务效率的重要工具。通过全面的数据采集、深入的 ...
2024-11-13在这个数据飞速增长的时代,企业若想在竞争中占据优势,必须充分利用数据分析优化其营销策略。数据不仅有助于理解市场趋势,还可 ...
2024-11-13数据分析行业的就业趋势显示出多个积极的发展方向。随着大数据和人工智能技术的不断进步,数据分析在各行各业中的应用变得越来越 ...
2024-11-13市场数据分析是一门涉及多种技能和工具的学科,对企业在竞争激烈的市场中保持竞争力至关重要。通过数据分析,企业不仅可以了解当 ...
2024-11-13数据分析与数据挖掘是数据科学领域中两个关键的组成部分,它们各有独特的目标、方法和应用场景。尽管它们经常在实际应用中结合使 ...
2024-11-13在如今这个数据驱动的时代,数据分析能力已经成为许多行业的重要技能。无论是为工作需要,还是为了职业转型,掌握数据分析都能够 ...
2024-11-13在如今这个数据驱动的时代,数据分析能力已经成为许多行业的重要技能。无论是为工作需要,还是为了职业转型,掌握数据分析都能够 ...
2024-11-13作为一名业务分析师,你肩负着将业务需求转化为技术解决方案的重任。面试这一角色时,涉及的问题多种多样,涵盖技术技能、分析能 ...
2024-11-13自学数据分析可能看似一项艰巨的任务,尤其在开始时。但是,通过一些策略和方法,你可以系统地学习和掌握数据分析的相关知识和技 ...
2024-11-10Excel是数据分析领域中的一款强大工具,它凭借其灵活的功能和易用的界面,成为了许多数据分析师和从业者的首选。无论是简单的数 ...
2024-11-10