第1章 openpyxl基础入门 - 第一次用代码操控Excel
1.1 本章学习目标
👋 欢迎开启Excel自动化之旅!
学完本章,你将能够:
- ✅ 理解openpyxl的基本概念
- ✅ 创建自己的第一个Excel文件
- ✅ 读取已有的Excel文件
- ✅ 掌握单元格的各种访问方式
- ✅ 了解openpyxl支持的数据类型
1.2 openpyxl是什么?
📖 一句话解释:openpyxl是一个Python库,让你用代码来操控Excel文件。
🎯 它能做什么?
| 功能 | 说明 | 实际应用场景 |
|---|---|---|
| 创建 | 用代码生成新的Excel文件 | 自动生成报表 |
| 读取 | 读取Excel中的数据 | 数据分析处理 |
| 修改 | 修改已有Excel内容 | 批量更新数据 |
| 样式 | 添加颜色、字体等样式 | 制作专业报表 |
| 保存 | 保存处理好的文件 | 数据持久化 |
🔌 工作原理:
使用openpyxl
读取数据
创建/修改
你的Python代码
Excel文件
1.3 基本概念扫盲(必看!)
在写代码之前,先认识5个核心概念:
| 概念 | 类比 | openpyxl代码 | 说明 |
|---|---|---|---|
| 工作簿 | 一本账本 | Workbook |
整个Excel文件 |
| 工作表 | 账本中的一页 | worksheet |
Excel底部的Sheet标签 |
| 单元格 | 页面上的格子 | Cell |
存储数据的最小单位 |
| 行 | 横格线 | row=1,2,3... |
用数字表示(1,2,3...) |
| 列 | 竖格线 | column=A,B,C... |
用字母表示(A,B,C...) |
📊 结构示意图:
📗 工作簿 Workbook
📄 工作表2 Sheet
C1单元格
D1单元格
📄 工作表1 Sheet
A1单元格
B1单元格
A2单元格
💡 记忆口诀:
- 工作簿 = 一本书
- 工作表 = 书的一页
- 单元格 = 页上的一个格子
1.4 练习1:创建你的第一个Excel文件 📝
📁 代码路径 : openpyxl-tutorial/chapter_01_basic/create_employee_workbook.py
📝 场景:新员工入职,需要创建一份员工信息登记表
📝 开发思路:
- 首先导入必要的库:Workbook用于创建工作簿,os用于处理文件路径
- 使用Workbook()创建一个新的工作簿对象
- 获取默认工作表并修改其标题
- 定义表头(使用元组保证数据完整性)
- 使用enumerate遍历表头,将每个标题写入第一行
- 准备员工数据(使用字典列表,便于维护和扩展)
- 遍历员工数据,将每个员工的信息按表头顺序写入对应列
- 创建输出目录(如果不存在)
- 保存工作簿到指定路径
python
# -*- coding: utf-8 -*-
"""
================================================================================
第1章/创建员工信息工作簿
================================================================================
开发思路:
1. 导入必要的库:Workbook用于创建工作簿,os用于处理文件路径
2. 使用Workbook()创建一个新的工作簿对象
3. 获取默认工作表并修改其标题
4. 定义表头(使用元组保证数据完整性)
5. 使用enumerate遍历表头,将每个标题写入第一行
6. 准备员工数据(使用字典列表,便于维护和扩展)
7. 遍历员工数据,将每个员工的信息按表头顺序写入对应列
8. 创建输出目录(如果不存在)
9. 保存工作簿到指定路径
================================================================================
"""
# 从openpyxl库导入Workbook类,用于创建Excel工作簿
from openpyxl import Workbook
# 导入datetime模块中的date类,用于处理日期数据
from datetime import date
# 导入os模块,用于处理文件路径和目录操作
import os
def create_employee_workbook():
"""
创建员工信息工作簿的函数
返回:生成的文件路径
"""
# ==================== 第1步:创建工作簿 ====================
# Workbook() 创建一个新的 Excel 工作簿对象
# 默认会创建一个名为 "Sheet" 的工作表
wb = Workbook()
# 获取当前活动的工作表(默认是第一个工作表)
# active 属性返回当前活动的工作表对象
ws = wb.active
# 修改工作表标题
# title 属性用于获取或设置工作表名称
ws.title = "员工信息表"
# ==================== 第2步:写入表头 ====================
# 表头定义 - 使用元组定义列标题,保证数据完整性
# 元组是不可变的,适合定义固定的表头
headers = ("员工编号", "姓名", "部门", "职位", "入职日期", "月薪(元)", "联系电话", "邮箱")
# 使用 enumerate 遍历表头,同时获取索引和值
# enumerate 返回 (索引, 值) 元组,索引从 0 开始
# start=1 表示索引从1开始,对应Excel的第1列
for col_index, header in enumerate(headers, start=1):
# cell() 方法用于访问单元格
# row=1 表示第一行,column=col_index 表示第几列
# value 属性用于设置单元格的值
ws.cell(row=1, column=col_index, value=header)
# ==================== 第3步:写入员工数据 ====================
# 模拟真实生产环境的新员工数据
# 使用列表嵌套字典的方式组织数据,便于维护和扩展
# 每个字典代表一个员工的信息
employees = [
{
"员工编号": "EMP001",
"姓名": "张三",
"部门": "技术部",
"职位": "高级工程师",
"入职日期": date(2024, 1, 15),
"月薪(元)": 25000,
"联系电话": "13800138001",
"邮箱": "zhangsan@company.com"
},
{
"员工编号": "EMP002",
"姓名": "李四",
"部门": "市场部",
"职位": "市场经理",
"入职日期": date(2024, 2, 1),
"月薪(元)": 20000,
"联系电话": "13800138002",
"邮箱": "lisi@company.com"
},
{
"员工编号": "EMP003",
"姓名": "王五",
"部门": "财务部",
"职位": "财务主管",
"入职日期": date(2024, 3, 10),
"月薪(元)": 22000,
"联系电话": "13800138003",
"邮箱": "wangwu@company.com"
},
{
"员工编号": "EMP004",
"姓名": "赵六",
"部门": "技术部",
"职位": "前端开发",
"入职日期": date(2024, 3, 20),
"月薪(元)": 18000,
"联系电话": "13800138004",
"邮箱": "zhaoliu@company.com"
},
{
"员工编号": "EMP005",
"姓名": "孙七",
"部门": "人力资源部",
"职位": "HR专员",
"入职日期": date(2024, 4, 5),
"月薪(元)": 15000,
"联系电话": "13800138005",
"邮箱": "sunqi@company.com"
}
]
# 遍历员工列表,将数据写入工作表
# enumerate(employees, start=2) 让行号从 2 开始(第 1 行是表头)
for row_index, employee in enumerate(employees, start=2):
# 按照表头顺序,从字典中提取对应的值
# 使用列表推导式生成一行的数据
row_data = [
employee["员工编号"],
employee["姓名"],
employee["部门"],
employee["职位"],
employee["入职日期"],
employee["月薪(元)"],
employee["联系电话"],
employee["邮箱"]
]
# 将一行数据写入工作表
# 内层循环遍历每一列的数据
for col_index, value in enumerate(row_data, start=1):
ws.cell(row=row_index, column=col_index, value=value)
# ==================== 第4步:保存工作簿 ====================
# 定义输出文件路径
# os.path.join 用于拼接路径,确保跨平台兼容性
# os.path.dirname(__file__) 获取当前文件所在目录
output_dir = os.path.join(os.path.dirname(__file__), "output")
# 如果输出目录不存在,则创建它
# exist_ok=True 表示如果目录已存在,不抛出异常
os.makedirs(output_dir, exist_ok=True)
# 拼接完整的文件路径
file_path = os.path.join(output_dir, "员工信息表.xlsx")
# save() 方法将工作簿保存到指定路径
wb.save(file_path)
# 返回文件路径,方便后续操作
return file_path
# 如果这个脚本被直接运行(不是被导入),则执行以下代码
if __name__ == "__main__":
# 调用函数创建工作簿
generated_file = create_employee_workbook()
# 打印成功信息
print(f"✅ 员工信息表创建成功!")
print(f"📁 文件保存位置:{generated_file}")
📊 知识图谱
创建员工信息工作簿
Workbook
创建工作簿
获取工作表
保存文件
Workbook
wb.active
ws.title
ws.cell
遍历写入
os.makedirs
wb.save
📊 代码执行时序图
文件系统 Workbook类 Python脚本 用户 文件系统 Workbook类 Python脚本 用户 运行脚本 创建工作簿对象 返回wb对象 wb.active获取工作表 返回ws对象 ws.title设置标题 ws.cell写入表头 ws.cell写入数据 os.makedirs创建目录 wb.save保存文件 写入Excel文件 保存成功 打印成功信息
🖨️ 代码运行效果展示
运行上述代码后,会生成一个名为 员工信息表.xlsx 的Excel文件,内容如下:
📊 工作表结构
| 工作表名称 | 说明 |
|---|---|
| 员工信息 | 主工作表,包含员工基本信息 |
📋 员工信息表内容
| 员工编号 | 姓名 | 部门 | 职位 | 入职日期 | 月薪(元) | 联系电话 | 邮箱 |
|---|---|---|---|---|---|---|---|
| EMP001 | 张三 | 技术部 | 高级工程师 | 2024-01-15 | 25000 | 13800138001 | zhangsan@company.com |
| EMP002 | 李四 | 市场部 | 市场经理 | 2024-02-01 | 20000 | 13800138002 | lisi@company.com |
| EMP003 | 王五 | 财务部 | 财务主管 | 2024-03-10 | 22000 | 13800138003 | wangwu@company.com |
| EMP004 | 赵六 | 技术部 | 前端开发 | 2024-03-20 | 18000 | 13800138004 | zhaoliu@company.com |
| EMP005 | 孙七 | 人力资源部 | HR专员 | 2024-04-05 | 15000 | 13800138005 | sunqi@company.com |
🖨️ 控制台输出
✅ 员工信息表创建成功!
📁 文件保存位置:openpyxl_tutorial/output/员工信息表.xlsx
📁 生成的文件结构
openpyxl_tutorial/
├── chapter_01_basic/
│ ├── create_employee_workbook.py # 创建脚本
└── output/
└── 员工信息表.xlsx # 生成的Excel文件
1.5 练习2:读取Excel文件内容 📖
📁 代码路径 : openpyxl-tutorial/chapter_01_basic/read_employee_workbook.py
📝 场景:读取刚才创建的员工信息表,看看里面有什么数据
📝 学习目标:
- 学习如何加载已有的Excel文件
- 掌握读取表头和数据的方法
- 了解如何获取工作表统计信息
📝 开发思路:
- 导入
load_workbook函数,专门用于加载已有的Excel文件 - 使用
load_workbook()打开指定的Excel文件 - 通过工作表名称获取指定的工作表
- 读取第一行的所有单元格,获取表头信息
- 使用
iter_rows()方法遍历数据行(从第2行开始,跳过表头) - 设置
values_only=True,直接获取单元格的值而不是Cell对象 - 打印每个员工的详细信息
- 获取工作表的统计信息(总行数、总列数)
- 关闭工作簿释放资源
python
# -*- coding: utf-8 -*-
"""
================================================================================
第1章/读取Excel文件内容
================================================================================
开发思路:
1. 导入load_workbook函数,专门用于加载已有的Excel文件
2. 使用load_workbook()打开指定的Excel文件
3. 通过工作表名称获取指定的工作表
4. 读取第一行的所有单元格,获取表头信息
5. 使用iter_rows()方法遍历数据行(从第2行开始,跳过表头)
6. 设置values_only=True,直接获取单元格的值而不是Cell对象
7. 打印每个员工的详细信息
8. 获取工作表的统计信息(总行数、总列数)
9. 关闭工作簿释放资源
================================================================================
"""
# 导入load_workbook函数(专门用于加载已有文件)
from openpyxl import load_workbook
def read_employee_workbook(excel_file_path):
"""
读取员工信息工作簿的函数
参数:excel_file_path - Excel文件的完整路径
"""
# ==================== 第1步:加载工作簿 ====================
# load_workbook() 函数用于加载已存在的 Excel 文件
# excel_file_path 是文件的完整路径
wb = load_workbook(excel_file_path)
# ==================== 第2步:获取工作表 ====================
# 通过工作表名称获取指定工作表
ws = wb["员工信息表"]
# 也可以通过索引获取:wb.worksheets[0]
# 或者获取活动工作表:wb.active
# ==================== 第3步:读取表头 ====================
print("=" * 60)
print("表头信息:")
print("=" * 60)
# 获取第一行的所有单元格值
headers = []
# ws[1] 获取第一行的所有单元格(返回元组)
for cell in ws[1]:
# cell.value 获取单元格的值
headers.append(cell.value)
# 打印表头,end=" "表示不换行,用两个空格分隔
print(f" {cell.value}", end=" ")
# 打印换行
print("\n")
# ==================== 第4步:读取数据行 ====================
print("=" * 60)
print("员工数据:")
print("=" * 60)
# 遍历所有行(从第 2 行开始,跳过表头)
# ws.iter_rows() 方法用于迭代行
# min_row=2 表示从第 2 行开始
# values_only=True 表示只返回单元格的值,而不是 Cell 对象
for row in ws.iter_rows(min_row=2, values_only=True):
# row 是一个元组,包含一行中所有单元格的值
# 通过索引访问每个字段的值
print(f"\n员工编号: {row[0]}")
print(f" 姓名: {row[1]}")
print(f" 部门: {row[2]}")
print(f" 职位: {row[3]}")
print(f" 入职日期: {row[4]}")
print(f" 月薪: {row[5]} 元")
print(f" 联系电话: {row[6]}")
print(f" 邮箱: {row[7]}")
# ==================== 第5步:获取工作表信息 ====================
print("\n" + "=" * 60)
print("工作表统计信息:")
print("=" * 60)
# max_row 属性返回工作表的最大行数
print(f"总行数: {ws.max_row}")
# max_column 属性返回工作表的最大列数
print(f"总列数: {ws.max_column}")
# 计算数据行数(减去表头)
print(f"数据行数: {ws.max_row - 1}")
# 关闭工作簿(释放资源)
wb.close()
# 如果这个脚本被直接运行(不是被导入),则执行以下代码
if __name__ == "__main__":
# 定义文件路径(这里使用相对路径示例)
file_path = "output/员工信息表.xlsx"
# 调用函数读取工作簿
read_employee_workbook(file_path)
📊 知识图谱
读取Excel文件内容
load_workbook
加载文件
获取工作表
读取数据
关闭文件
load_workbook
wb.工作表名
wb.active
ws.行号
ws.iter_rows
cell.value
wb.close
📊 代码执行时序图
文件系统 load_workbook Python脚本 用户 文件系统 load_workbook Python脚本 用户 运行脚本 调用load_workbook 读取Excel文件 返回文件内容 返回wb对象 wb.工作表名获取工作表 返回ws对象 ws.第1行读取表头 返回表头数据 ws.iter_rows遍历数据行 返回每行数据 打印员工信息 ws.max_row/max_column获取统计 返回统计信息 wb.close关闭工作簿 释放资源 完成读取
1.6 练习3:掌握单元格访问方式 🔧
📁 代码路径 : openpyxl-tutorial/chapter_01_basic/demonstrate_cell_access.py
📝 场景:学习不同的单元格访问方式,灵活操作Excel数据
📝 学习目标:
- 掌握4种单元格访问方式
- 学会读取单元格的值和属性
- 了解批量写入数据的方法
📝 开发思路:
- 创建工作簿并获取活动工作表
- 演示四种单元格访问方式:cell()方法、坐标字符串、行列坐标、append()方法
- 展示如何读取单元格的值和属性
- 保存文件供查看
python
# -*- coding: utf-8 -*-
"""
================================================================================
第1章/单元格访问方式演示
================================================================================
开发思路:
1. 创建工作簿并获取活动工作表
2. 演示四种单元格访问方式:cell()方法、坐标字符串、行列坐标、append()方法
3. 展示如何读取单元格的值和属性
4. 保存文件供查看
================================================================================
"""
# 从openpyxl导入Workbook类
from openpyxl import Workbook
# 导入os模块处理文件路径
import os
def demonstrate_cell_access_methods():
"""
演示不同的单元格访问方式
生产场景:灵活操作单元格数据
"""
# 创建工作簿
wb = Workbook()
ws = wb.active
ws.title = "单元格访问演示"
print("=" * 60)
print("单元格访问方式演示:")
print("=" * 60)
# ==================== 方式 1: 使用 cell() 方法 ====================
# 通过行号和列号访问单元格
# 这是最常用的方式,适合在循环中使用
ws.cell(row=1, column=1, value="方式1: cell()方法")
ws.cell(row=1, column=2, value=100)
print("方式1 - 使用 cell(row, column) 方法访问单元格")
# ==================== 方式 2: 使用坐标字符串 ====================
# 通过类似 "A1", "B2" 的坐标字符串访问
# 这种方式更直观,但不适合在循环中使用
ws["A2"] = "方式2: 坐标字符串"
ws["B2"] = 200
print("方式2 - 使用 ws['A2'] 坐标字符串访问单元格")
# ==================== 方式 3: 使用行列坐标 ====================
# 通过 row 和 column 属性获取单元格对象
cell = ws.cell(row=3, column=1)
cell.value = "方式3: 先获取再赋值"
ws.cell(row=3, column=2).value = 300
print("方式3 - 先获取 Cell 对象,再设置 value 属性")
# ==================== 方式 4: 批量写入行数据 ====================
# append() 方法可以在工作表末尾追加一行数据
# 参数是一个可迭代对象(列表、元组等)
ws.append(["方式4: append()方法", 400, "额外数据"])
ws.append(["批量数据1", "批量数据2", "批量数据3"])
print("方式4 - 使用 append() 方法批量追加数据")
# ==================== 读取单元格 ====================
print("\n" + "-" * 60)
print("读取单元格数据:")
print("-" * 60)
# 读取方式 1
value1 = ws.cell(row=1, column=1).value
print(f"A1 单元格的值: {value1}")
# 读取方式 2
value2 = ws["B2"].value
print(f"B2 单元格的值: {value2}")
# 读取方式 3 - 获取 Cell 对象的所有属性
cell = ws["A1"]
print(f"\nA1 单元格详细信息:")
print(f" 值: {cell.value}")
print(f" 行号: {cell.row}")
print(f" 列号: {cell.column}")
print(f" 坐标: {cell.coordinate}") # 返回 "A1" 这样的坐标字符串
print(f" 数据类型: {cell.data_type}") # 's'=字符串, 'n'=数字, 'd'=日期等
# 保存文件
output_dir = os.path.join(os.path.dirname(__file__), "output")
os.makedirs(output_dir, exist_ok=True)
file_path = os.path.join(output_dir, "单元格访问演示.xlsx")
wb.save(file_path)
print(f"\n文件已保存: {file_path}")
wb.close()
# 如果这个脚本被直接运行(不是被导入),则执行以下代码
if __name__ == "__main__":
demonstrate_cell_access_methods()
📊 知识图谱
单元格访问方式
单元格访问
cell方法
坐标字符串
Cell对象
append方法
ws.cell
row/column
ws.A1
直接赋值
cell.value
cell.row
cell.column
cell.coordinate
cell.data_type
ws.append
批量写入
📊 代码执行时序图
文件系统 Cell对象 Workbook类 Python脚本 用户 文件系统 Cell对象 Workbook类 Python脚本 用户 运行脚本 创建工作簿 返回wb对象 wb.active获取工作表 返回ws对象 方式1: ws.cell写入数据 创建Cell对象 写入数据 方式2: ws.A1坐标写入 坐标访问写入 方式3: 获取Cell对象 获取Cell对象 返回cell 设置value属性 方式4: ws.append批量追加 批量创建Cell 批量写入 读取cell.value 返回值 获取cell属性 返回属性 os.makedirs创建目录 wb.save保存 写入Excel 保存成功 完成
🖨️ 代码运行效果
运行上述代码后,会生成一个名为 单元格访问演示.xlsx 的Excel文件,内容如下:
📊 工作表内容展示
| A列 | B列 | C列 |
|---|---|---|
| 方式1: cell()方法 | 100 | |
| 方式2: 坐标字符串 | 200 | |
| 方式3: 先获取再赋值 | 300 | |
| 方式4: append()方法 | 400 | 额外数据 |
| 批量数据1 | 批量数据2 | 批量数据3 |
表格说明:
- 第1行:使用
cell(row=1, column=1)和cell(row=1, column=2)方法写入 - 第2行:使用
ws["A2"]和ws["B2"]坐标字符串方式写入 - 第3行:使用
ws.cell(row=3, column=1)获取Cell对象后赋值 - 第4行:使用
append()方法批量写入一行数据 - 第5行:再次使用
append()方法追加批量数据
📁 生成的文件结构
openpyxl_tutorial/
├── chapter_01_basic/
│ ├── demonstrate_cell_access.py # 演示脚本
└── output/
└── 单元格访问演示.xlsx # 生成的Excel文件
1.7 练习4:了解数据类型 📊
📁 代码路径 : openpyxl-tutorial/chapter_01_basic/demonstrate_data_types.py
📝 场景:了解openpyxl支持的各种数据类型
📝 学习目标:
- 认识openpyxl支持的9种数据类型
- 学会正确处理不同类型的数据
- 掌握日期时间类型的使用方法
📝 开发思路:
- 创建工作簿并设置表头
- 依次写入不同类型的数据:字符串、整数、浮点数、日期、布尔值等
- 保存文件
python
# -*- coding: utf-8 -*-
"""
================================================================================
第1章/数据类型演示
================================================================================
开发思路:
1. 创建工作簿并设置表头
2. 依次写入不同类型的数据:字符串、整数、浮点数、日期、布尔值等
3. 保存文件
================================================================================
"""
# 从openpyxl导入Workbook类
from openpyxl import Workbook
# 导入datetime模块用于处理日期时间
from datetime import datetime, date
# 导入os模块处理文件路径
import os
def demonstrate_data_types():
"""
演示 openpyxl 支持的数据类型
生产场景:正确处理不同类型的业务数据
"""
wb = Workbook()
ws = wb.active
ws.title = "数据类型演示"
# 设置表头
headers = ["数据类型", "示例值", "说明"]
for col, header in enumerate(headers, 1):
ws.cell(row=1, column=col, value=header)
# ==================== 字符串类型 ====================
row = 2
ws.cell(row=row, column=1, value="字符串")
ws.cell(row=row, column=2, value="Hello, openpyxl!")
ws.cell(row=row, column=3, value="普通文本数据")
# ==================== 整数类型 ====================
row += 1
ws.cell(row=row, column=1, value="整数")
ws.cell(row=row, column=2, value=42)
ws.cell(row=row, column=3, value="整数值")
# ==================== 浮点数类型 ====================
row += 1
ws.cell(row=row, column=1, value="浮点数")
ws.cell(row=row, column=2, value=3.14159)
ws.cell(row=row, column=3, value="带小数点的数值")
# ==================== 日期类型 ====================
row += 1
ws.cell(row=row, column=1, value="日期")
ws.cell(row=row, column=2, value=date(2024, 3, 15))
ws.cell(row=row, column=3, value="datetime.date 对象")
# ==================== 日期时间类型 ====================
row += 1
ws.cell(row=row, column=1, value="日期时间")
ws.cell(row=row, column=2, value=datetime(2024, 3, 15, 14, 30, 0))
ws.cell(row=row, column=3, value="datetime.datetime 对象")
# ==================== 布尔类型 ====================
row += 1
ws.cell(row=row, column=1, value="布尔值")
ws.cell(row=row, column=2, value=True)
ws.cell(row=row, column=3, value="True/False")
# ==================== 百分比 ====================
row += 1
ws.cell(row=row, column=1, value="百分比")
ws.cell(row=row, column=2, value=0.85)
ws.cell(row=row, column=3, value="0.85 表示 85%")
# ==================== 公式 ====================
row += 1
ws.cell(row=row, column=1, value="公式")
ws.cell(row=row, column=2, value="=SUM(B2:B8)")
ws.cell(row=row, column=3, value="Excel 公式")
# ==================== None/空值 ====================
row += 1
ws.cell(row=row, column=1, value="空值")
ws.cell(row=row, column=2, value=None)
ws.cell(row=row, column=3, value="None 表示空单元格")
# 保存文件
output_dir = os.path.join(os.path.dirname(__file__), "output")
os.makedirs(output_dir, exist_ok=True)
file_path = os.path.join(output_dir, "数据类型演示.xlsx")
wb.save(file_path)
print("=" * 60)
print("数据类型演示文件已创建")
print("=" * 60)
print(f"文件路径: {file_path}")
print(f"包含数据类型: 字符串、整数、浮点数、日期、日期时间、布尔值、百分比、公式、空值")
wb.close()
# 如果这个脚本被直接运行(不是被导入),则执行以下代码
if __name__ == "__main__":
demonstrate_data_types()
📊 知识图谱
数据类型演示
数据类型
文本类型
数值类型
时间类型
特殊类型
字符串 str
文本数据
整数 int
浮点数 float
百分比
公式 formula
日期 date
日期时间 datetime
布尔值 bool
空值 None
📊 代码执行时序图
datetime模块 文件系统 Cell对象 Workbook类 Python脚本 用户 datetime模块 文件系统 Cell对象 Workbook类 Python脚本 用户 运行脚本 创建工作簿 返回wb对象 wb.active获取工作表 返回ws对象 写入表头 创建表头Cell 写入字符串 cell.value = "Hello..." 写入整数 cell.value = 42 写入浮点数 cell.value = 3.14159 date(2024, 3, 15) 返回date对象 写入日期 cell.value = date对象 datetime(2024, 3, 15, 14, 30, 0) 返回datetime对象 写入日期时间 cell.value = datetime对象 写入布尔值 cell.value = True 写入百分比 cell.value = 0.85 写入公式 cell.value = "=SUM(B2:B8)" 写入空值 cell.value = None os.makedirs创建目录 wb.save保存 写入Excel文件 保存成功 打印成功信息
🖨️ 代码运行效果
运行上述代码后,会生成一个名为 数据类型演示.xlsx 的Excel文件,内容如下:
📊 工作表内容展示
| 数据类型 | 示例值 | 说明 |
|---|---|---|
| 字符串 | Hello, openpyxl! | 普通文本数据 |
| 整数 | 42 | 整数值 |
| 浮点数 | 3.14159 | 带小数点的数值 |
| 日期 | 2024-03-15 | datetime.date 对象 |
| 日期时间 | 2024-03-15 14:30:00 | datetime.datetime 对象 |
| 布尔值 | TRUE | True/False |
| 百分比 | 0.85 | 表示 85% |
| 公式 | 90778.59576 | Excel 公式 |
| 空值 | None 表示空单元格 |
表格说明:
- 第1行:表头(数据类型、示例值、说明)
- 第2行:字符串类型
Hello, openpyxl! - 第3行:整数类型
42 - 第4行:浮点数类型
3.14159 - 第5行:日期类型
2024-03-15 - 第6行:日期时间类型
2024-03-15 14:30:00 - 第7行:布尔值类型
TRUE - 第8行:百分比类型
0.85(显示为85%) - 第9行:公式类型
=SUM(B2:B8),计算结果为90778.59576 - 第10行:空值类型
None,显示为空单元格
📁 生成的文件结构
openpyxl_tutorial/
├── chapter_01_basic/
│ ├── demonstrate_data_types.py # 演示脚本
└── output/
└── 数据类型演示.xlsx # 生成的Excel文件
1.8 本章知识总结 📝
一、学习路径回顾
本章我们按照以下路径学习:
1.2 基本概念
1.4 练习1
创建Excel
1.4 练习2
读取Excel
1.4 练习3
单元格访问
1.4 练习4
数据类型
二、核心概念速记
5个核心概念:
| 概念 | 类比 | 代码 | 作用 |
|---|---|---|---|
| 工作簿 | 一本书 | Workbook() |
整个Excel文件 |
| 工作表 | 书的一页 | wb.active |
单个Sheet |
| 单元格 | 页上的格子 | ws.cell() |
存储数据 |
| 行 | 横格线 | row=1,2,3 |
数字编号 |
| 列 | 竖格线 | column=A,B,C |
字母编号 |
三、核心代码速查表
文件操作:
| 操作 | 代码 | 说明 |
|---|---|---|
| 创建工作簿 | wb = Workbook() |
创建新Excel文件 |
| 加载文件 | wb = load_workbook("文件.xlsx") |
读取已有文件 |
| 保存文件 | wb.save("文件名.xlsx") |
保存工作簿 |
| 关闭文件 | wb.close() |
释放资源 |
工作表操作:
| 操作 | 代码 | 说明 |
|---|---|---|
| 获取活动表 | ws = wb.active |
获取当前工作表 |
| 设置表名 | ws.title = "名称" |
修改工作表名称 |
单元格操作:
| 操作 | 代码 | 适用场景 |
|---|---|---|
| cell方法 | ws.cell(row=1, column=1, value="数据") |
循环中使用 |
| 坐标写入 | ws["A1"] = "数据" |
快速访问特定单元格 |
| 读取单元格 | value = ws["A1"].value |
通过坐标读取 |
| 批量追加 | ws.append(["数据1", "数据2"]) |
追加一行数据 |
| 遍历数据 | ws.iter_rows(min_row=2, values_only=True) |
遍历多行数据 |
四、4种单元格访问方式对比
| 方式 | 代码示例 | 适用场景 |
|---|---|---|
| cell方法 | ws.cell(row=1, column=1, value="数据") |
循环中使用 |
| 坐标字符串 | ws["A1"] = "数据" |
快速访问特定单元格 |
| Cell对象 | cell = ws.cell(row=1, column=1) |
需要获取单元格属性 |
| append方法 | ws.append(["数据1", "数据2"]) |
批量追加数据 |
五、9种数据类型一览
| 类型 | Python类型 | 示例 | Excel显示 |
|---|---|---|---|
| 字符串 | str |
"Hello" |
Hello |
| 整数 | int |
42 |
42 |
| 浮点数 | float |
3.14 |
3.14 |
| 日期 | datetime.date |
date(2024, 3, 15) |
2024-03-15 |
| 日期时间 | datetime.datetime |
datetime(2024, 3, 15, 14, 30) |
2024-03-15 14:30:00 |
| 布尔值 | bool |
True / False |
TRUE / FALSE |
| 百分比 | float |
0.85 |
85% |
| 公式 | str |
"=SUM(A1:A10)" |
计算结果 |
| 空值 | None |
None |
空单元格 |
六、本章知识图谱
第1章知识图谱
openpyxl基础入门
创建工作簿
读取工作簿
单元格操作
数据类型
Workbook
wb.active
wb.save
load_workbook
ws.iter_rows
cell.value
cell
坐标访问
append
字符串
数字
日期
布尔值
七、常见问题解答 ❓
Q1: 如何安装openpyxl?
bash
pip install openpyxl
Q2: 如何读取Excel文件?
python
from openpyxl import load_workbook
wb = load_workbook("文件.xlsx")
ws = wb.active
Q3: 如何写入数据到指定单元格?
python
# 方式1:使用cell方法
ws.cell(row=1, column=1, value="数据")
# 方式2:使用坐标
ws["A1"] = "数据"
Q4: 如何遍历Excel中的所有数据?
python
for row in ws.iter_rows(min_row=2, values_only=True):
print(row) # 每行数据是一个元组
八、下一步学习建议 📚
恭喜完成第1章!你已经掌握了openpyxl的基础操作。建议接下来:
- 动手实践:把本章的4个练习代码都运行一遍
- 修改尝试:修改代码中的数据,观察结果变化
- 解决实际问题:尝试用学到的知识处理你的工作数据
下一章预告:我们将学习如何给Excel添加样式,让表格变得美观专业!