Python自动化:Python操作Excel的多种方式Pandas+openpyxl+xlrd

在Python中,操作Excel数据通常可以通过几个流行的库来实现,比如pandas、openpyxl、xlrd等。

下面会分别介绍这三个流行库来实现对Excel的操作。

  • 博客主页:长风清留扬-CSDN博客
  • 每天更新大数据相关方面的技术,分享自己的实战工作经验和学习总结,尽量帮助大家解决更多问题和学习更多新知识,欢迎评论区分享自己的看法
  • 感谢大家点赞👍收藏⭐评论

推荐阅读:

Python入门最全基础

Python趣味小游戏

Python疑难杂症百科-BUG编年史


目录

Pandas操作Excel

安装Pandas

读取Excel文件(read_excel)

语法参数

案例:

进阶案例:读取特定单元格范围

写入Excel文件(to_excel)

语法参数

案例

进阶案例:写入带有样式的Excel

openpyxl操作Excel

[安装 openpyxl](#安装 openpyxl)

基本操作

加载工作簿

激活工作表

读取数据

写入数据

语法参数详解

案例代码

[读取并修改 Excel](#读取并修改 Excel)

进阶案例

设置样式

xlrd操作Excel

[安装 xlrd](#安装 xlrd)

基本操作

加载工作簿

访问工作表

读取数据

语法参数详解

案例代码

[读取 Excel 文件中的数据](#读取 Excel 文件中的数据)


Pandas操作Excel

安装Pandas

复制代码
pip install pandas

使用pandas操作Excel文件主要涉及读取(read_excel)和写入(to_excel)两个主要操作。

读取Excel文件(read_excel)

pandas的read_excel函数用于读取Excel文件(.xls或.xlsx),并将其内容加载到DataFrame对象中。

语法参数

  • io: 文件路径或文件对象。
  • sheet_name: 指定要读取的工作表名称或索引。可以是字符串、整数、字符串列表或None。如果是None,则返回字典,其中包含所有工作表。
  • header: 指定作为列名的行,默认为0(第一行)。如果文件没有列标题,可以设置为None。
  • names: 用于结果的列名的列表,如果文件不包含列标题行,应该明确指定此参数。
  • index_col: 用作行索引的列编号或列名,可以是整数、字符串、整数列表、字符串列表或False(默认)。
  • usecols: 返回列的列号或列名列表。
  • dtype: 数据或字典,用于强制指定某些列的数据类型。
  • engine: 用于读取Excel文件的引擎。None将尝试使用io的扩展名来选择引擎。如果安装了xlrd,则.xls文件将使用它;否则,将使用openpyxl或odfpy(对于.ods文件)。

案例:

python 复制代码
import pandas as pd  
  
# 读取Excel文件  
df = pd.read_excel('example.xlsx', sheet_name='Sheet1', header=0, index_col=None, usecols=None, dtype=None)  
  
# 显示前几行数据  
print(df.head())  
  
# 如果文件没有列标题  
df_no_header = pd.read_excel('example_no_header.xlsx', header=None, names=['Column1', 'Column2', 'Column3'])  
print(df_no_header.head())  
  
# 读取多个工作表  
xls = pd.ExcelFile('example.xlsx')  
df1 = pd.read_excel(xls, 'Sheet1')  
df2 = pd.read_excel(xls, 'Sheet2')  
# 或者  
dfs = pd.read_excel(xls, sheet_name=None)  # 返回一个字典,键为工作表名,值为DataFrame

进阶案例:读取特定单元格范围

虽然read_excel没有直接读取特定单元格范围的参数,但你可以通过usecols和行切片来实现类似的效果。

python 复制代码
# 假设我们只想读取'A'列和'C'列的前两行  
df = pd.read_excel('example.xlsx', usecols=['A', 'C']).head(2)

写入Excel文件(to_excel)

DataFrame的to_excel方法用于将DataFrame写入Excel文件。

语法参数

  • excel_writer: 文件路径或ExcelWriter对象。
  • sheet_name: 字符串,默认为'Sheet1'。
  • columns: 要写入的列名列表。
  • header: 是否写入列名作为Excel文件的第一行,默认为True。
  • index: 是否将行索引写入Excel文件,默认为True。
  • startrow 和 startcol: 左上角单元格的行号和列号,用于开始写入,默认为0。
  • engine: 用于写入Excel文件的引擎,默认为None(将尝试使用openpyxl或xlsxwriter)。

案例

python 复制代码
# 创建一个简单的DataFrame  
df = pd.DataFrame({  
    'A': [1, 2, 3, 4],  
    'B': ['foo', 'bar', 'baz', 'qux'],  
    'C': [1.0, 2.1, 3.2, 4.3]  
})  
  
# 写入Excel文件  
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False, header=True)  
  
# 如果要写入多个工作表  
with pd.ExcelWriter('output_multiple_sheets.xlsx') as writer:  
    df.to_excel(writer, sheet_name='Sheet1', index=False)  
    df.to_excel(writer, sheet_name='Sheet2', index=False, startrow=10)  # 从第11行开始写入

进阶案例:写入带有样式的Excel

为了写入带有样式的Excel文件,你需要使用ExcelWriter和xlsxwriter或openpyxl引擎(取决于你的需求)。

python 复制代码
# 使用xlsxwriter引擎写入带有样式的Excel  
with pd.ExcelWriter('styled_output.xlsx', engine='xlsxwriter') as writer:  
    df.to_excel(writer, sheet_name='Sheet1', index=False)  
    workbook = writer.book  
    worksheet = writer.sheets['Sheet1']  
      
    # 创建一个格式对象  
    format = workbook.add_format({'bold': True, 'font_color': 'red'})  
      
    # 应用格式到特定单元格  
    worksheet.write('A1', 'Styled Cell', format)

注意:xlsxwriter引擎在写入时不支持直接修改已存在的DataFrame内容(如通过DataFrame.style),它主要用于在写入时添加额外的样式或格式。如果你需要复杂的样式处理,可能需要结合使用pandas和openpyxl(或xlsxwriter)的高级功能。

openpyxl操作Excel

openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。它提供了丰富的接口来操作 Excel 文件,包括读取、修改和写入数据,以及设置样式等。下面我将详细解释如何使用 openpyxl 操作 Excel,并给出案例代码和进阶案例。

安装 openpyxl

首先,确保你已经安装了 openpyxl。如果还没有安装,可以通过 pip 安装:

python 复制代码
pip install openpyxl

基本操作

加载工作簿

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

python 复制代码
from openpyxl import load_workbook  
  
wb = load_workbook(filename='example.xlsx')

激活工作表

通过工作簿对象获取工作表。你可以通过工作表名称或索引来访问特定的工作表。

python 复制代码
# 通过名称  
ws = wb['Sheet1']  
  
# 或者通过索引(索引从0开始)  
ws = wb.worksheets[0]  
  
# 也可以使用 active 属性获取当前活动的工作表  
ws = wb.active

读取数据

你可以通过单元格的坐标来读取数据。

python 复制代码
# 读取单元格的值  
cell_value = ws['A1'].value  
print(cell_value)  
  
# 遍历行  
for row in ws.iter_rows(values_only=True):  
    print(row)  
  
# 遍历列  
for col in ws.iter_cols(values_only=True):  
    for value in col:  
        print(value)

写入数据

你可以直接给单元格赋值来写入数据。

python 复制代码
# 写入数据  
ws['B2'] = 'Hello, openpyxl!'  
  
# 保存修改  
wb.save('modified_example.xlsx')

语法参数详解

由于 openpyxl 的功能非常广泛,这里只列举一些常用函数和方法的参数。

  • load_workbook(filename, read_only=False, data_only=False, keep_vba=True, ...)
    • filename: Excel 文件路径。
    • read_only: 是否以只读模式打开文件。
    • data_only: 是否只读取单元格的值,忽略公式(默认为 False)。
    • keep_vba: 是否保留 VBA 内容(默认为 True)。
  • Worksheet.iter_rows(min_row=None, max_row=None, min_col=None, max_col=None, values_only=False, ...)
    • min_row, max_row, min_col, max_col: 指定迭代的行或列的范围。
    • values_only: 是否只迭代单元格的值(默认为 False,迭代单元格对象)。
  • Worksheet.iter_cols(...) 与 iter_rows 类似,但用于列迭代。

案例代码

读取并修改 Excel

python 复制代码
from openpyxl import load_workbook  
  
# 加载工作簿  
wb = load_workbook('example.xlsx')  
  
# 激活工作表  
ws = wb.active  
  
# 读取单元格数据  
print(ws['A1'].value)  
  
# 修改单元格数据  
ws['B2'] = 'New Value'  
  
# 保存修改后的工作簿  
wb.save('modified_example.xlsx')

进阶案例

设置样式

python 复制代码
from openpyxl import Workbook  
from openpyxl.styles import Font, Color, Alignment, Border, Side  
  
# 创建一个新的工作簿和工作表  
wb = Workbook()  
ws = wb.active  
  
# 创建一个字体对象  
font = Font(name='Calibri', size=11, bold=True, italic=False, vertAlign=None,  
            underline='none', strike=False, color='FF0000')  
  
# 创建一个对齐对象  
alignment = Alignment(horizontal='general', vertical='bottom',  
                      text_rotation=0, wrap_text=False,  
                      shrink_to_fit=False, indent=0)  
  
# 创建一个边框对象  
thin = Side(border_style="thin", color="000000")  
border = Border(top=thin, left=thin, right=thin, bottom=thin)  
  
# 应用样式到单元格  
ws['A1'].font = font  
ws['A1'].alignment = alignment  
ws['A1'].border = border  
ws['A1'] = 'Styled Cell'  
  
# 保存工作簿  
wb.save('styled_workbook.xlsx')

在进阶案例中,我们展示了如何创建字体、对齐和边框样式,并将它们应用到单元格上。openpyxl 提供了丰富的样式选项,可以满足大多数 Excel 样式设置的需求。

xlrd操作Excel

xlrd 是一个用于读取 Excel 文件(主要是 .xls 和 .xlsx 格式,尽管对 .xlsx 的支持可能不如 openpyxl 全面)的 Python 库。然而,需要注意的是,从版本 2.0.0 开始,xlrd 仅支持 .xls 格式的文件,不再支持 .xlsx。对于 .xlsx 文件,推荐使用 openpyxl 或 pandas(后者底层可以调用 openpyxl)。

安装 xlrd

首先,确保你已经安装了 xlrd。如果还没有安装,可以通过 pip 安装:

python 复制代码
pip install xlrd==1.2.0  # 最好选择一个支持.xlsx的旧版本

基本操作

加载工作簿

使用 xlrd.open_workbook() 函数加载 Excel 文件。

python 复制代码
import xlrd  
  
# 加载工作簿  
workbook = xlrd.open_workbook('example.xls')

访问工作表

通过索引或名称访问工作表。

python 复制代码
# 通过索引访问(索引从0开始)  
sheet = workbook.sheet_by_index(0)  
  
# 或者通过名称访问  
sheet = workbook.sheet_by_name('Sheet1')

读取数据

使用行号(从0开始)和列号(也从0开始)或单元格名称(如 'A1')来读取数据。

python 复制代码
# 通过行号和列号读取  
cell_value = sheet.cell_value(0, 0)  # 读取第一行第一列的数据  
print(cell_value)  
  
# 或者使用 cell 方法(返回单元格对象,然后可以调用 value 属性)  
cell = sheet.cell(0, 0)  
print(cell.value)  
  
# 通过单元格名称读取(需要安装xlutils或类似库来转换A1表示法)  
# 注意:xlrd本身不直接支持A1表示法,这里仅作为说明  
# 通常,你会通过计算行号和列号来访问单元格

语法参数详解

由于 xlrd 的 API 相对简单,这里主要关注 open_workbook() 和 sheet_by_...() 方法的参数。

  • xlrd.open_workbook(filename=None, ...)
    • filename: Excel 文件路径。
    • 其他参数(如 on_demand、formatting_info 等)在较新版本的 xlrd 中可能不再支持或用途有限,特别是针对 .xlsx 文件的处理。
  • workbook.sheet_by_index(sheetx) 和 workbook.sheet_by_name(sheet_name)
    • sheetx: 工作表的索引(整数)。
    • sheet_name: 工作表的名称(字符串)。

案例代码

读取 Excel 文件中的数据

python 复制代码
import xlrd  
  
# 加载工作簿  
workbook = xlrd.open_workbook('example.xls')  
  
# 通过名称访问工作表  
sheet = workbook.sheet_by_name('Sheet1')  
  
# 读取并打印第一行和第一列的数据  
print(sheet.cell_value(0, 0))  
  
# 遍历所有行和列  
for row_idx in range(sheet.nrows):  
    for col_idx in range(sheet.ncols):  
        print(sheet.cell_value(row_idx, col_idx), end='\t')  
    print()  # 换行
相关推荐
我的xiaodoujiao43 分钟前
Django 基础知识详细图文教程 12-Django 模型定义与使用 2
后端·python·django
孙启超1 小时前
【AI开发之Rust】第 22 课:一键多平台与工程收尾 —— CI、发布检查与结课
开发语言·后端·rust
wtblszn8 小时前
自动化包装生产线设备可视化管理方案
运维·自动化
admin and root8 小时前
「AI安全篇」实战AntiDebug自动化JS逆向加解密MCP
javascript·人工智能·网络安全·自动化·漏洞挖掘·cnvd·src赏金
智能RPA8 小时前
智能体自动化平台与主数据管理平台(MDM)对比评测
人工智能·自动化·agent·rpa
其实防守也摸鱼8 小时前
Fastjson 反序列化漏洞(JNDI注入)
android·数据库·安全·oracle·自动化·fastjson·反序列化
happylifetree9 小时前
Python09:核心语法-数据存储与运算-字面量
python
跨境小彭9 小时前
Temu拉美站点铺货实操复盘:手动复制痛点与批量自动化解决方案
服务器·人工智能·搜索引擎·自动化·temu电商运营
落魄实习生9 小时前
Agent Scope Java 2.x 系列【7】工具使用
java·开发语言·ai
心之语歌9 小时前
Tkinter 画布基本梳理
运维·服务器·python