目录
系列文章
前言
1 知识概览
2 模块详解
2.1 openpyxl
2.2 pandas
2.3 xlrd
2.4 xlwt
2.5 xlsxwriter
2.6 xlwing
3 后续
系列文章
知识周汇 | Python操作Excel全攻略系列(二):文件操作篇
知识周汇 | Python操作Excel全攻略系列(三):sheet操作篇
前言
作为现代职场不可或缺的利器,Excel以其卓越的数据处理能力,稳居办公软件使用率之首。无论是面对海量数据的深度分析与整理,还是实现业务信息的系统化收集与管理,亦或是打造专业精准的报表体系,Excel始终扮演着无可替代的关键角色。本系列教程旨在系统化地讲解Python操作Excel的核心技能,精心规划为五大专题:模块详解篇、文件操作篇、工作表掌控篇、数据处理篇以及格式美化篇。
1 知识概览
工作簿(Workbook):Excel的最高层级文件,文件扩展名为.xlsx或.xls,包含一个或多个工作表,可存储数据、公式、图表等
工作表(Sheet/Worksheet):工作簿中的单个页面,由行列组成的网格,可重命名、添加、删除,默认名称Sheet1、Sheet2等
单元格(Cell):行列交叉形成的单个格子,数据存储的基本单位,由列标和行号定位(如A1),输入数据、公式等
列(Column):垂直方向的单元格集合,用字母标识(A、B、...、Z、AA、AB等),共16,384列(Excel 2007及以上)
行(Row):水平方向的单元格集合,用数字标识(1、2、3...),共1,048,576行(Excel 2007及以上)
处理excel表的模块主要有以下几个:
-
openpyxl:适用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件。提供了丰富的API来操作Excel文件,包括读取、写入、修改单元格内容、样式设置等。感兴趣可以读一下英文文档openpyxl英文文档
-
pandas:这个库是一个超级强大的数据分析库,通过
read_excel()
和to_excel()
方法,可以轻松地将Excel文件读取为DataFrame或将DataFrame写入Excel文件。pandas英文文档 -
xlrd:用于读取Excel文件(支持xls和xlsx格式)。注意:xlrd 2.0.0及以上版本不再支持xlsx文件的读取,如果需要读取xlsx文件,建议使用openpyxl或pandas。xlrd英文文档
-
xlwt:用于写入Excel文件(仅支持xls格式)。提供了创建和修改Excel文件的功能,但不支持xlsx格式。xlwt英文文档
-
xlsxwriter:用于创建和写入Excel文件(支持xlsx格式)。提供了丰富的功能,包括格式化、图表、公式等,但不支持读取Excel文件。xlsxwriter英文文档
-
xlwing: 是一个 Python 库,用于与 Excel 文件交互、自动化 Excel 任务,并实现 Python 与 Excel 的无缝集成。xlwing英文文档
2 模块详解
以下内容均摘录自相关英文文献,并附有简要解读,旨在为读者提供基础概念,需要详细了解还需要读取英文文档
2.1 openpyxl
from openpyxl import Workbook
wb = Workbook()# grab the active worksheet
ws = wb.active# Data can be assigned directly to cells
ws['A1'] = 42# Rows can also be appended
ws.append([1, 2, 3])# Python types will automatically be converted
import datetime
ws['A3'] = datetime.datetime.now()# Save the file
wb.save("sample.xlsx")
输出结果
2.1.1 导入 Workbook
类
from openpyxl import Workbook
-
openpyxl
是一个用于读写 Excel 文件的 Python 库。 -
Workbook
是openpyxl
中的一个类,用于创建一个新的 Excel 工作簿。
2.1.2 创建一个新的工作簿
wb = Workbook()
-
Workbook()
创建一个新的 Excel 工作簿对象,并将其赋值给变量wb
。 -
默认情况下,新工作簿会包含一个名为
Sheet
的工作表。
2.1.3 获取活动工作表
ws = wb.active
-
wb.active
返回当前活动的工作表(即默认创建的第一个工作表)。 -
将其赋值给变量
ws
,以便后续操作。
2.1.4 直接向单元格赋值
ws['A1'] = 42
-
将值
42
写入工作表的A1
单元格。 -
Excel 单元格可以通过类似
A1
的坐标直接访问。
2.1.5 追加一行数据
ws.append([1, 2, 3])
-
append()
方法用于在工作表的末尾追加一行数据。 -
这里追加了一个包含
[1, 2, 3]
的列表,数据会依次写入当前行的第一、第二和第三列。
2.1.6 自动转换 Python 类型
import datetime
ws['A2'] = datetime.datetime.now()
-
导入
datetime
模块,用于获取当前时间。 -
datetime.datetime.now()
返回当前的日期和时间。 -
将该值写入
A2
单元格。openpyxl
会自动将 Python 的datetime
对象转换为 Excel 支持的日期时间格式。
2.1.7 保存文件
wb.save("sample.xlsx")
-
save()
方法将工作簿保存为指定的文件名(这里是sample.xlsx
)。 -
如果文件已存在,则会覆盖;如果不存在,则会创建新文件。
2.2 pandas
pd.read_excel('tmp.xlsx')
读取excel表,pd.read_excel()
:这是 pandas
库中用于读取 Excel 文件的函数。它可以将 Excel 文件的内容加载为一个 DataFrame。'tmp.xlsx'
:这是要读取的 Excel 文件的路径。文件名为 tmp.xlsx
,假设它与代码在同一目录下。pandas是一个很强大的数据分析模块,需要了解掌握建议可以读一下它的英文文档或者相关书籍。
2.3 xlrd
import xlrd
book = xlrd.open_workbook("sample.xls")
print("The number of worksheets is {0}".format(book.nsheets))
print("Worksheet name(s): {0}".format(book.sheet_names()))
sh = book.sheet_by_index(0)
print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols))
print("Cell D30 is {0}".format(sh.cell_value(rowx=1, colx=2)))
for rx in range(sh.nrows):print(sh.row(rx))
输出结果示例:
2.3.1 导入 xlrd
库
import xlrd
-
xlrd
是一个用于读取 Excel 文件的 Python 库,支持.xls
格式(旧版 Excel 文件)。 -
注意:
xlrd
从 2.0.0 版本开始不再支持.xlsx
格式,如果需要读取.xlsx
文件,可以使用openpyxl
或pandas
。
2.3.2 打开 Excel 文件
book = xlrd.open_workbook("sample.xls")
-
xlrd.open_workbook()
打开指定的 Excel 文件(这里是sample.xls
),并返回一个Book
对象。 -
Book
对象表示整个 Excel 文件,包含所有工作表和数据。
2.3.3 打印工作表的数量
print("The number of worksheets is {0}".format(book.nsheets))
-
book.nsheets
返回 Excel 文件中工作表的数量。 -
使用
format()
方法将数量插入到输出字符串中。
2.3.4 打印工作表的名称
print("Worksheet name(s): {0}".format(book.sheet_names()))
-
book.sheet_names()
返回一个列表,包含所有工作表的名称。 -
使用
format()
方法将工作表名称列表插入到输出字符串中。
2.3.5 获取第一个工作表
sh = book.sheet_by_index(0)
-
book.sheet_by_index(0)
根据索引获取第一个工作表(索引从 0 开始)。 -
返回一个
Sheet
对象,表示该工作表。
2.3.6 打印工作表的基本信息
print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols))
-
sh.name
:工作表的名称。 -
sh.nrows
:工作表的行数。 -
sh.ncols
:工作表的列数。 -
使用
format()
方法将这些信息插入到输出字符串中。
2.3.7 读取特定单元格的值
print("Cell D30 is {0}".format(sh.cell_value(rowx=1, colx=2)))
-
sh.cell_value(rowx=1, colx=2)
读取指定单元格的值。-
rowx=1
:行索引(从 0 开始,所以1
表示第二行)。 -
colx=2
:列索引(从 0 开始,所以2
表示第三列,即C
列)。
-
-
注意:这里代码中的注释是
Cell D30
,但实际读取的是C2
单元格的值(因为rowx=1, colx=2
对应的是第二行第三列)。
2.3.8 遍历工作表的每一行
for rx in range(sh.nrows):print(sh.row(rx))
-
sh.nrows
是工作表的行数。 -
sh.row(rx)
返回指定行的所有单元格数据,以列表形式返回。 -
使用
for
循环遍历每一行,并打印该行的数据。
2.4 xlwt
import xlwt# Create a workbook
workbook = xlwt.Workbook()# Add a sheet
sheet = workbook.add_sheet('Sheet1')# Write data
sheet.write(0, 0, 'Name')
sheet.write(0, 1, 'Age')
sheet.write(1, 0, 'Alice')
sheet.write(1, 1, 30)
sheet.write(2, 0, 'Bob')
sheet.write(2, 1, 25)# Save the workbook
workbook.save('example.xls')
运行结果:
2.4.1 导入 xlwt
库
import xlwt
-
xlwt
是一个用于创建和写入 Excel 文件的 Python 库,支持.xls
格式(旧版 Excel 文件)。 -
注意:
xlwt
不支持.xlsx
格式,如果需要创建.xlsx
文件,可以使用openpyxl
或pandas
。
2.4.2 创建一个工作簿
workbook = xlwt.Workbook()
-
xlwt.Workbook()
创建一个新的 Excel 工作簿对象,并将其赋值给变量workbook
。 -
工作簿是 Excel 文件的顶层容器,可以包含多个工作表。
2.4.3 添加一个工作表
sheet = workbook.add_sheet('Sheet1')
-
workbook.add_sheet('Sheet1')
在工作簿中添加一个名为Sheet1
的工作表。 -
返回一个
Worksheet
对象,表示该工作表,并将其赋值给变量sheet
。
2.4.4 写入数据
sheet.write(0, 0, 'Name')
sheet.write(0, 1, 'Age')
sheet.write(1, 0, 'Alice')
sheet.write(1, 1, 30)
sheet.write(2, 0, 'Bob')
sheet.write(2, 1, 25)
-
sheet.write(row, col, value)
用于向工作表的指定单元格写入数据。-
row
:行索引(从 0 开始)。 -
col
:列索引(从 0 开始)。 -
value
:要写入的值(可以是字符串、数字等)。
-
-
代码中写入的数据如下:
-
第一行:
A1
单元格写入Name
,B1
单元格写入Age
。 -
第二行:
A2
单元格写入Alice
,B2
单元格写入30
。 -
第三行:
A3
单元格写入Bob
,B3
单元格写入25
。
-
2.4.5 保存工作簿
workbook.save('example.xls')
-
workbook.save('example.xls')
将工作簿保存为指定的文件名(这里是example.xls
)。 -
如果文件已存在,则会覆盖;如果不存在,则会创建新文件。
2.5 xlsxwriter
import xlsxwriterworkbook = xlsxwriter.Workbook('hello.xlsx')
worksheet = workbook.add_worksheet()worksheet.write('A1', 'Hello world')workbook.close()
运行结果:
2.5.1 导入 xlsxwriter
库
import xlsxwriter
-
xlsxwriter
是一个用于创建和写入 Excel 文件的 Python 库,支持.xlsx
格式(新版 Excel 文件)。 -
它提供了丰富的功能,如设置单元格样式、添加图表、公式等。
2.5.2 创建一个工作簿
workbook = xlsxwriter.Workbook('hello.xlsx')
-
xlsxwriter.Workbook('hello.xlsx')
创建一个新的 Excel 工作簿对象,并将其赋值给变量workbook
。 -
参数
'hello.xlsx'
是保存文件的路径和名称。 -
如果文件已存在,则会被覆盖;如果不存在,则会创建新文件。
2.5.3 添加一个工作表
worksheet = workbook.add_worksheet()
-
workbook.add_worksheet()
在工作簿中添加一个新的工作表。 -
默认情况下,工作表的名称为
Sheet1
,但可以通过传递参数指定名称,例如:worksheet = workbook.add_worksheet('MySheet')
-
返回一个
Worksheet
对象,表示该工作表,并将其赋值给变量worksheet
。
2.5.4 向单元格写入数据
worksheet.write('A1', 'Hello world')
-
worksheet.write('A1', 'Hello world')
向工作表的A1
单元格写入字符串Hello world
。 -
write()
方法的第一个参数是单元格的坐标(如A1
),第二个参数是要写入的值(可以是字符串、数字、公式等)。
2.5.5 关闭工作簿
workbook.close()
-
workbook.close()
关闭工作簿并保存文件。 -
在
xlsxwriter
中,必须显式调用close()
方法,否则文件可能无法正确保存。
2.6 xlwing
import xlwings as xwwb = xw.Book('FileName.xlsx') # connect to a file that is open or in the current working directorysheet = wb.sheets['Sheet']
sheet['A1'].value = 'Foo 1'wb.save()
wb.close()
运行结果:
2.6.1 导入 xlwings
库
import xlwings as xw
-
xlwings
是一个用于与 Excel 交互的 Python 库,支持.xlsx
和.xls
格式。 -
它允许 Python 代码与 Excel 文件进行双向交互(读取和写入)。
2.6.2 连接到 Excel 文件
wb = xw.Book('FileName.xlsx')
-
xw.Book('FileName.xlsx')
打开指定的 Excel 文件(这里是FileName.xlsx
),并返回一个Book
对象。 -
如果文件已打开,
xlwings
会直接连接到已打开的文件;如果文件未打开,则会从当前工作目录中加载文件。 -
如果文件不存在,会抛出错误。
2.6.3 获取工作表
sheet = wb.sheets['Sheet']
-
wb.sheets['Sheet']
获取工作簿中名为Sheet
的工作表。 -
返回一个
Sheet
对象,表示该工作表,并将其赋值给变量sheet
。
2.6.4 向单元格写入数据
sheet['A1'].value = 'Foo 1'
-
sheet['A1'].value = 'Foo 1'
向工作表的A1
单元格写入字符串Foo 1
。 -
value
属性用于读取或写入单元格的值。
2.6.5 保存工作簿
wb.save()
-
wb.save()
保存对工作簿的更改。 -
如果文件未保存过,则会保存到当前工作目录;如果文件已存在,则会覆盖原文件。
2.6.6 关闭工作簿
wb.close()
-
wb.close()
关闭工作簿。 -
关闭后,Python 与 Excel 文件的连接将断开。
3 后续
后续将通过常见案例讲解Excel表的实际应用场景。分享自己的学习感受,尤其是对于非程序员来说,不必过于纠结代码细节,比如为什么是import pandas as pd
而不是import pandas as pdx
。重点在于理解代码的功能,即使不完全明白也没关系,只要能解决工作中的实际问题就足够了。当我们把编程当作工具使用时,不知不觉中就会进步。知识是网状的,不是线性的,随着每个知识点的积累,它们会自然而然地连接起来。