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添加样式,让表格变得美观专业!


相关推荐
夏幻灵3 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码3 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
bkspiderx5 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆5 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光5 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
码云数智-园园5 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
禾小西6 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨6 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
全栈练习生6 小时前
AI Agent 沙箱
python·ai
徐小黑ACG7 小时前
Golang 基础05 结构体struct
开发语言·算法·golang