如何使用Python操作Excel?openpyxl指南

最直接有效的方式是使用openpyxl库操作.xlsx格式文件。首先安装openpyxl,通过pip install openpyxl命令完成;接着加载工作簿并选择工作表,可按名称或活动工作表方式访问;随后可读取或写入单元格数据,支持单个赋值和追加多行数据;最后保存工作簿以生成新文件或覆盖原文件。openpyxl还能处理公式、样式、数据类型,并提供read_only和write_only模式优化大型文件的性能,分别降低内存占用与提升写入效率。

如何使用Python操作Excel?openpyxl指南

Python操作Excel文件,特别是.xlsx格式的,最直接有效的方式就是利用openpyxl这个第三方库。它允许你在不依赖Microsoft Excel软件本身的情况下,对工作簿进行读取、写入和修改,极大地方便了数据处理和自动化任务。

如何使用Python操作Excel?openpyxl指南

要使用Python操作Excel,核心就是openpyxl库。它提供了一套直观的API来加载工作簿、选择工作表、读写单元格数据,以及保存修改。

如何使用Python操作Excel?openpyxl指南

解决方案

立即学习“Python免费学习笔记(深入)”;

首先,确保你已经安装了openpyxl。如果没有,一个简单的pip install openpyxl就能搞定。

如何使用Python操作Excel?openpyxl指南

一旦安装完毕,操作流程通常是这样的:

加载工作簿: 使用openpyxl.load_workbook()函数加载一个现有的Excel文件。

from openpyxl import load_workbooktry:    workbook = load_workbook('my_data.xlsx')    print("工作簿加载成功!")except FileNotFoundError:    print("文件未找到,尝试创建新文件或检查路径。")    # 如果文件不存在,你可能需要创建它    # from openpyxl import Workbook    # workbook = Workbook()    # workbook.save('my_data.xlsx')

如果文件不存在,load_workbook会抛出FileNotFoundError。这时,你可以选择捕获异常,然后创建一个新的工作簿,或者提示用户检查文件路径。我个人觉得,对于自动化脚本,最好是能清晰地知道文件是否存在,避免后续操作出错。

选择工作表: 工作簿加载后,你需要指定要操作的工作表。可以通过名称或索引来访问。

# 按名称选择工作表sheet = workbook['Sheet1']print(f"当前操作的工作表是:{sheet.title}")# 获取活动工作表(默认打开时显示的)active_sheet = workbook.activeprint(f"活动工作表是:{active_sheet.title}")

通常我会偏向于用名称,因为索引可能会因为工作表顺序调整而变动,不够稳定。

读取单元格数据: 访问单元格非常直接,就像访问字典键值一样。

# 读取单个单元格cell_a1_value = sheet['A1'].valueprint(f"A1单元格的值:{cell_a1_value}")# 遍历行和列for row in sheet.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3):    for cell in row:        print(f"{cell.coordinate}: {cell.value}", end="t")    print() # 换行

iter_rowsiter_cols是处理大量数据时非常高效的方法,它们不会一次性加载所有数据到内存,这对于处理大文件来说至关重要。

写入单元格数据: 直接给单元格的value属性赋值即可。

sheet['A1'] = "你好,Python!"sheet['B1'] = 123sheet['C1'] = True# 写入多行数据data_to_write = [    ["姓名", "年龄", "城市"],    ["张三", 30, "北京"],    ["李四", 25, "上海"]]for row_data in data_to_write:    sheet.append(row_data) # append会在最后一行追加数据

append()方法特别方便,它会自动找到工作表的下一行,然后把列表中的数据依次写入。

保存工作簿: 完成所有修改后,记得保存。

workbook.save('my_modified_data.xlsx')print("文件保存成功!")

这里要注意,如果你保存的文件名和加载时相同,它会覆盖原文件。所以,养成保存到新文件名的习惯,或者在覆盖前做好备份,是个好习惯。我曾经就因为没注意这个细节,不小心覆盖了重要数据,那感觉真是…心疼。

如何安装和获取openpyxl,以及它在Python生态中的位置?

安装openpyxl非常简单,因为它是一个纯Python库,不依赖于任何外部二进制文件。你只需要打开命令行或终端,然后运行pip install openpyxl。这个命令会从Python包索引(PyPI)下载并安装最新的稳定版本。如果你使用的是虚拟环境(强烈推荐!),请确保在激活的虚拟环境中执行此命令,这样可以保持项目依赖的隔离性。

在Python的数据处理生态系统中,openpyxl扮演着一个非常重要的角色。虽然pandas库在数据分析和处理方面更为强大和全面,但openpyxl专注于Excel文件的读写,并且在处理单元格样式、合并单元格、图表等Excel特有功能时,提供了更细粒度的控制。很多时候,我们会将openpyxlpandas结合使用:pandas用于数据清洗和转换,然后openpyxl用于将处理后的数据以特定格式(例如,带样式、特定布局)写入Excel文件,或者从复杂格式的Excel中精确抽取数据。这就像一个团队协作,各司其职,共同完成任务。

除了基本的读写,openpyxl如何处理特定数据类型、公式和单元格样式?

openpyxl在处理Excel的复杂性方面做得相当不错。它不仅仅是文本的搬运工。

对于数据类型openpyxl会尝试自动识别并转换。例如,当你从单元格读取数据时,如果Excel中是数字或日期,openpyxl通常会将其转换为Python的intfloatdatetime对象。写入时也类似,Python的数字和日期对象会被正确地写入Excel。但有时候,特别是日期,你可能需要确保格式正确,或者手动指定单元格的number_format属性,以确保Excel能正确显示。

公式的处理也很有意思。当你读取一个包含公式的单元格时,cell.value默认会返回公式本身(例如=SUM(A1:A5)),而不是计算结果。如果你需要获取计算结果,需要设置data_only=True当你加载工作簿时:workbook = load_workbook('my_data.xlsx', data_only=True)。但要注意,这种方式只返回Excel最后一次保存时的计算结果,而不是实时计算。写入公式则直接将公式字符串赋给cell.value即可。

# 写入公式sheet['A6'] = "=SUM(A1:A5)"# 尝试读取公式结果 (需要文件在Excel中被计算并保存过)# workbook_data_only = load_workbook('my_data.xlsx', data_only=True)# sheet_data_only = workbook_data_only['Sheet1']# print(f"A6单元格的公式结果 (data_only): {sheet_data_only['A6'].value}")

至于单元格样式,这是openpyxl的强项之一。你可以控制字体、颜色、边框、对齐方式、填充色等等。这通常通过导入Font, PatternFill, Border, Side, Alignment等类来完成。

from openpyxl.styles import Font, PatternFill, Border, Side, Alignment# 设置字体sheet['A1'].font = Font(name='Arial', size=14, bold=True, italic=True, color="FF0000") # 红色# 设置填充色sheet['B1'].fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid") # 黄色背景# 设置边框thin_border = Border(left=Side(style='thin'),                     right=Side(style='thin'),                     top=Side(style='thin'),                     bottom=Side(style='thin'))sheet['C1'].border = thin_border# 设置对齐sheet['D1'].alignment = Alignment(horizontal='center', vertical='center')# 合并单元格sheet.merge_cells('E1:F1')sheet['E1'] = "合并单元格示例"sheet['E1'].alignment = Alignment(horizontal='center', vertical='center')

这些样式操作让你可以生成非常专业的报告,而不仅仅是纯数据表格。我个人在做一些自动化报告时,就经常利用这些功能来美化输出,让报告更具可读性。

处理大型Excel文件时,openpyxl有哪些性能考量和优化策略?

处理大型Excel文件(例如,几十万行甚至上百万行的数据)时,性能和内存消耗是必须考虑的问题。openpyxl在这方面提供了几种优化模式。

最主要的两个模式是read_onlywrite_only

read_only模式: 当你只需要读取文件,并且文件非常大时,使用load_workbook('your_file.xlsx', read_only=True)。在这个模式下,openpyxl不会将整个文件加载到内存中,而是按需读取。它会返回一个ReadOnlyWorksheet对象,你只能通过迭代器(如iter_rows())来访问数据。这显著降低了内存占用,尤其是在处理GB级别的文件时,效果非常明显。

from openpyxl import load_workbook# 以只读模式加载大型工作簿large_workbook = load_workbook('large_data.xlsx', read_only=True)large_sheet = large_workbook.active# 遍历行,逐行处理,而不是一次性加载所有数据for row in large_sheet.iter_rows():    for cell in row:        # 处理 cell.value        passlarge_workbook.close() # 记得关闭工作簿以释放资源

我曾用这个模式处理过一个包含五十万行数据的报表,如果没有read_only,我的笔记本肯定会内存溢出。

write_only模式: 类似地,当你需要写入大量数据到一个新文件时,使用Workbook()write_only=True参数。这会创建一个WriteOnlyWorkbook对象,工作表也变成WriteOnlyWorksheet。在这种模式下,你不能修改已经写入的单元格,也不能访问单元格的样式属性,因为数据是直接写入流中,不保留在内存里。你需要使用append()方法逐行写入数据。

from openpyxl import Workbook# 创建一个只写工作簿new_workbook = Workbook(write_only=True)new_sheet = new_workbook.create_sheet()# 写入标题行new_sheet.append(["Header 1", "Header 2", "Header 3"])# 写入大量数据for i in range(1, 100000):    new_sheet.append([f"Data {i}-1", f"Data {i}-2", f"Data {i}-3"])new_workbook.save('large_output.xlsx')

这种模式对于生成大型报告文件非常有效,避免了在内存中构建整个Excel结构,从而大大减少了内存消耗和写入时间。

除了这两种模式,还有一些通用的优化建议:

避免不必要的循环和单元格访问: 如果你能一次性获取某个范围的数据,尽量避免逐个单元格访问。及时关闭工作簿: workbook.close()可以释放文件句柄和内存资源,特别是在循环处理多个文件时,这一点很重要。选择合适的数据结构: 在Python中处理数据时,使用列表推导式或生成器表达式等高效的数据结构和方法。

理解这些模式和策略,能让你在处理Excel文件时更加游刃有余,无论是面对小型配置表还是庞大的数据仓库。

以上就是如何使用Python操作Excel?openpyxl指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1363556.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何使用Python实现强化学习?Gym环境搭建
上一篇 2025年12月14日 03:28:19
Python如何实现数据可视化?Matplotlib高级绘图技巧
下一篇 2025年12月14日 03:28:33

相关推荐

  • Matplotlib 地图中多类型图例的创建与优化

    Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化

    本教程旨在解决matplotlib地图可视化中,如何在一个图例中同时展示颜色块(如区域分类)和自定义标记(如特定兴趣点)的问题。文章详细介绍了当传统`patch`对象无法正确显示标记时,如何利用`matplotlib.lines.line2d`创建标记图例句柄,并将其与颜色块图例句柄合并,从而生成一…

    2026年5月10日 用户投稿
    100
  • 利用海象运算符简化条件赋值:Python教程与最佳实践

    本文旨在探讨Python中海象运算符(:=)在条件赋值场景下的应用。通过对比传统if/else语句与海象运算符,以及条件表达式,分析海象运算符在简化代码、提高可读性方面的优势与局限性。并通过具体示例,展示如何在列表推导式等场景下合理使用海象运算符,同时强调其潜在的复杂性及替代方案,帮助开发者更好地掌…

    2026年5月10日
    000
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • Python递归函数追踪与性能考量:以序列打印为例

    本文深入探讨了Python中一种递归打印序列元素的方法,并着重演示了如何通过引入缩进参数来有效追踪递归函数的执行流程和参数变化。通过实际代码示例,文章揭示了递归调用可能带来的潜在性能开销,特别是对调用栈空间的需求,以及Python默认递归深度限制可能导致的错误,为读者提供了理解和优化递归算法的实用见…

    2026年5月10日
    000
  • python中zip函数详解 python多序列压缩zip函数应用场景

    zip函数的应用场景包括:1) 同时遍历多个序列,2) 合并多个列表的数据,3) 数据分析和科学计算中的元素运算,4) 处理csv文件,5) 性能优化。zip函数是一个强大的工具,能够简化代码并提高处理多个序列时的效率。 在Python中,zip函数是一个非常有用的工具,它能够将多个可迭代对象打包成…

    2026年5月10日
    000
  • JavaScript 闭包:理解闭包原理与内存泄漏问题

    闭包是函数访问其外部作用域变量的能力,即使外部函数已执行完毕。如 inner 函数引用 outer 中的 count,形成闭包,使变量持久存在。闭包本身无害,但可能因延长变量生命周期导致内存泄漏,例如事件监听器引用大对象时。若未及时清理 DOM 事件或定时器,闭包会阻止垃圾回收,造成内存占用过高。解…

    2026年5月10日
    000
  • Python中怎样使用pymongo?

    在python中使用pymongo可以轻松地与mongodb数据库进行交互。1)安装pymongo:pip install pymongo。2)连接到mongodb:from pymongo import mongoclient; client = mongoclient(‘mongod…

    2026年5月10日
    000
  • Python 函数参数类型:如何使用可变参数和动态参数?

    python 中的参数类型:关键词参数、可变参数和动态参数 在 python 中,函数的参数可以分为以下几种类型: 关键词参数(kw)**:这些参数具有名称,并且在调用函数时明确指定。可变参数(*args):这些参数没有名称,允许函数接受任意数量的位置参数。它们将被收集到一个元组中。动态参数(kwa…

    2026年5月10日
    000
  • pycharm解析器怎么添加 解析器添加详细流程

    在pycharm中添加解析器的步骤包括:1) 打开pycharm并进入设置,2) 选择project interpreter,3) 点击齿轮图标并选择add,4) 选择解析器类型并配置路径,5) 点击ok完成添加。添加解析器后,选择合适的类型和版本,配置环境变量,并利用解析器的功能提高开发效率。 在…

    2026年5月10日
    000
  • python中numpy的用法

    NumPy是Python中用于科学计算的强大库,它提供了以下功能:多维数组处理矩阵运算快速傅里叶变换(FFT)线性代数随机数生成 NumPy在Python中的强大功能 NumPy是Python中用于科学计算的一个强大且灵活的库。它提供了用于处理多维数组和矩阵的一组高效工具,是数据分析和机器学习项目的…

    2026年5月10日
    100
  • python如何捕获所有类型的异常_python try except捕获所有异常的方法

    答案:捕获所有异常推荐使用except Exception as e,可捕获常规错误并记录日志,避免影响程序正常退出;需拦截系统信号时才用except BaseException as e。 在Python中,要捕获所有类型的异常,最常见且推荐的方法是使用 except Exception as e…

    2026年5月10日
    000
  • python中f怎么用

    f-字符串是 Python 3.6 中引入的格式化字符串语法糖,提供了简洁且安全的方式来插入表达式和变量。f-字符串以字符串前缀 f 为标志,使用大括号包含表达式或变量。f-字符串支持条件表达式和格式规范符,提供了更大的灵活性、安全性、可读性和易维护性。 在 Python 中使用 f-字符串 f-字…

    2026年5月10日
    100
  • 怎么在手机上把XML文件转换为PDF?

    不可能直接在手机上用单一应用完成 XML 到 PDF 的转换。需要使用云端服务,通过两步走的方式实现:1. 在云端转换 XML 为 PDF,2. 在手机端访问或下载转换后的 PDF 文件。 怎么在手机上把XML文件转换为PDF? 这问题问得好,比直接问“怎么转换”有深度多了!因为它触及了移动端环境的…

    2026年5月10日
    000
  • ReCAPTCHA V3低分处理策略:结合V3与V2实现智能风险控制与用户验证

    本文旨在解决ReCAPTCHA V3在低分情况下无法直接触发验证码挑战的问题。我们将探讨如何通过巧妙地结合ReCAPTCHA V3的无感评分机制与ReCAPTCHA V2的交互式挑战,实现一套既能有效阻挡机器人流量,又能最大限度减少对合法用户干扰的智能验证系统。文章将详细阐述其实现原理、前端与后端集…

    2026年5月10日
    100
  • Python正则表达式:处理数字不同情况的替换

    本文旨在帮助读者理解和解决在使用Python正则表达式进行数字替换时遇到的问题。通过具体示例,详细解释了如何正确匹配和替换不同格式的数字,避免常见的匹配陷阱,并提供可直接使用的代码示例。掌握这些技巧,能有效提高处理文本数据的效率和准确性。 在使用Python的re模块进行字符串替换时,正则表达式的编…

    2026年5月10日
    000
  • python的tuple什么意思

    元组是Python中一种有序、不可变的序列数据结构。用于存储相关数据,例如坐标、个人信息或枚举值。创建方式:圆括号(),元素以逗号,分隔。访问元素:索引运算符;遍历元素:for循环。 什么是Python中的Tuple? Tuple,中文称为元组,是Python中一种有序、不可变的序列数据结构。 特点…

    2026年5月10日
    000
  • Python官网用户调查的参与方式_Python官网反馈提交详细教程

    答案是通过访问Python官网新闻页面、邮件邀请链接或GitHub仓库提交反馈。具体为:访问官网查找用户调查公告,或点击邮件中的专属链接参与,在GitHub的cpython仓库提交技术建议,并注意如实填写问卷与保护隐私。 如果您希望参与Python官网的用户调查并提交反馈,可以通过官方指定的渠道完成…

    2026年5月10日
    000
  • 我有时使用 awk 而不是 Python 的四个原因

    Python 是一门强大的编程语言,但在某些特定场景下,Awk 的优势更为显著,尤其体现在可移植性、生命周期、代码简洁性和与其他工具的互操作性方面。 Python 脚本通常具有良好的可移植性,但并非总能在所有环境中完美运行,例如流行的 Docker 基础镜像 (如 Debian 和 Alpine)。…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信