Python办公自动化教程 - 第1章 openpyxl基础入门 - 第一次用代码操控Excel

第1章 openpyxl基础入门 - 第一次用代码操控Excel

1.1 本章学习目标

👋 欢迎开启Excel自动化之旅!

学完本章,你将能够:

  1. ✅ 理解openpyxl的基本概念
  2. ✅ 创建自己的第一个Excel文件
  3. ✅ 读取已有的Excel文件
  4. ✅ 掌握单元格的各种访问方式
  5. ✅ 了解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

📝 场景:新员工入职,需要创建一份员工信息登记表

📝 开发思路

  1. 首先导入必要的库:Workbook用于创建工作簿,os用于处理文件路径
  2. 使用Workbook()创建一个新的工作簿对象
  3. 获取默认工作表并修改其标题
  4. 定义表头(使用元组保证数据完整性)
  5. 使用enumerate遍历表头,将每个标题写入第一行
  6. 准备员工数据(使用字典列表,便于维护和扩展)
  7. 遍历员工数据,将每个员工的信息按表头顺序写入对应列
  8. 创建输出目录(如果不存在)
  9. 保存工作簿到指定路径
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

📝 场景:读取刚才创建的员工信息表,看看里面有什么数据

📝 学习目标

  1. 学习如何加载已有的Excel文件
  2. 掌握读取表头和数据的方法
  3. 了解如何获取工作表统计信息

📝 开发思路

  1. 导入load_workbook函数,专门用于加载已有的Excel文件
  2. 使用load_workbook()打开指定的Excel文件
  3. 通过工作表名称获取指定的工作表
  4. 读取第一行的所有单元格,获取表头信息
  5. 使用iter_rows()方法遍历数据行(从第2行开始,跳过表头)
  6. 设置values_only=True,直接获取单元格的值而不是Cell对象
  7. 打印每个员工的详细信息
  8. 获取工作表的统计信息(总行数、总列数)
  9. 关闭工作簿释放资源
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数据

📝 学习目标

  1. 掌握4种单元格访问方式
  2. 学会读取单元格的值和属性
  3. 了解批量写入数据的方法

📝 开发思路

  1. 创建工作簿并获取活动工作表
  2. 演示四种单元格访问方式:cell()方法、坐标字符串、行列坐标、append()方法
  3. 展示如何读取单元格的值和属性
  4. 保存文件供查看
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支持的各种数据类型

📝 学习目标

  1. 认识openpyxl支持的9种数据类型
  2. 学会正确处理不同类型的数据
  3. 掌握日期时间类型的使用方法

📝 开发思路

  1. 创建工作簿并设置表头
  2. 依次写入不同类型的数据:字符串、整数、浮点数、日期、布尔值等
  3. 保存文件
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的基础操作。建议接下来:

  1. 动手实践:把本章的4个练习代码都运行一遍
  2. 修改尝试:修改代码中的数据,观察结果变化
  3. 解决实际问题:尝试用学到的知识处理你的工作数据

下一章预告:我们将学习如何给Excel添加样式,让表格变得美观专业!


相关推荐
小旭95272 小时前
Spring Data Redis 从入门到实战:简化 Redis 操作全解析
java·开发语言·spring boot·redis·spring
zzginfo2 小时前
javascript 类定义常见注意事项
开发语言·前端·javascript
智算菩萨2 小时前
【Python图像处理】4 NumPy数组操作与图像矩阵运算
图像处理·python·numpy
SomeB1oody2 小时前
【Python深度学习】1.1. 多层感知器MLP(人工神经网络)介绍
开发语言·人工智能·python·深度学习·机器学习
天下无贼!2 小时前
【功能实现】基于Vue3+TS实现大文件分片上传
开发语言·javascript·node.js·vue·html5
数据科学小丫2 小时前
数据分析利器 Pandas :apply() 方法 + map() 配对 + 计算描述统计 + 协方差和相关性 + 异常值处理常用方法(基于 python )
python·数据分析·numpy·pandas
程序员小寒2 小时前
JavaScript设计模式(九):工厂模式实现与应用
开发语言·前端·javascript·设计模式
派大星酷2 小时前
线程池-----Executors
java·开发语言
财经资讯数据_灵砚智能2 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年4月6日
大数据·人工智能·python·信息可视化·语言模型·自然语言处理·ai编程