pin_drop当前位置:知识文库 ❯ 图文

Python openpyxl工作表操作教程 - 创建删除复制冻结

一、概述

工作表(Worksheet)是Excel工作簿中的单个表格页面。openpyxl提供了丰富的工作表操作功能,包括创建、删除、复制、重命名、设置标签颜色、冻结窗格、筛选等。合理管理工作表是组织Excel数据的基础。


二、语法

代码示例

wb.create_sheet(title, index)
wb.remove(sheet)
wb.copy_worksheet(sheet)
ws.title = '新名称'
ws.sheet_properties.tabColor = 'FF0000'
ws.freeze_panes = 'A2'

三、参数说明

工作表常用属性与方法

属性/方法 类型 说明
title str 工作表名称
sheet_properties.tabColor str 标签颜色(RGB十六进制)
max_row int 最大行号
max_column int 最大列号
dimensions str 数据范围(如A1:C10)
freeze_panes str 冻结窗格位置
auto_filter.ref str 自动筛选范围

工作簿操作方法

方法 参数 说明
create_sheet(title, index) title:名称, index:位置 创建新工作表
remove(sheet) sheet:工作表对象 删除工作表
copy_worksheet(sheet) sheet:工作表对象 复制工作表
get_sheet_by_name(name) name:名称 按名称获取工作表(旧版)
wb[name] name:名称 按名称获取工作表(推荐)

四、返回值

create_sheet()copy_worksheet()返回Worksheet对象。


五、代码示例

示例1:创建与管理工作表

代码示例

from openpyxl import Workbook

wb = Workbook()

# 默认工作表
default_ws = wb.active
default_ws.title = '首页'
print(f"默认工作表: {wb.sheetnames}")

# 创建新工作表
ws1 = wb.create_sheet('销售数据')
ws2 = wb.create_sheet('库存数据', 1)  # 插入到索引1
ws3 = wb.create_sheet('汇总')
print(f"创建后: {wb.sheetnames}")

# 按名称获取工作表
ws = wb['销售数据']
ws['A1'] = '这是销售数据表'
print(f"获取工作表: {ws.title}, A1={ws['A1'].value}")

# 删除工作表
wb.remove(ws3)
print(f"删除后: {wb.sheetnames}")

wb.save('sheet_ops.xlsx')
print("工作表操作文件已保存")

输出:

代码示例

默认工作表: ['首页']
创建后: ['首页', '库存数据', '销售数据', '汇总']
获取工作表: 销售数据, A1=这是销售数据表
删除后: ['首页', '库存数据', '销售数据']
工作表操作文件已保存

示例2:标签颜色与冻结窗格

代码示例

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = '数据表'

# 写入表头和数据
headers = ['编号', '姓名', '部门', '工资']
ws.append(headers)
for i in range(1, 21):
    ws.append([i, f'员工{i}', f'部门{i%3+1}', 5000 + i*100])

# 设置标签颜色
ws.sheet_properties.tabColor = '2196F3'  # 蓝色

# 冻结首行(表头固定)
ws.freeze_panes = 'A2'

# 设置自动筛选
ws.auto_filter.ref = f'A1:D{ws.max_row}'

print(f"标签颜色: {ws.sheet_properties.tabColor}")
print(f"冻结位置: {ws.freeze_panes}")
print(f"筛选范围: {ws.auto_filter.ref}")
print(f"数据范围: {ws.dimensions}")

wb.save('freeze_filter.xlsx')
print("冻结与筛选文件已保存")

输出:

代码示例

标签颜色: 2196F3
冻结位置: A2
筛选范围: A1:D21
数据范围: A1:D21
冻结与筛选文件已保存

示例3:复制工作表与遍历

代码示例

from openpyxl import Workbook

wb = Workbook()

# 创建源工作表
ws_source = wb.active
ws_source.title = '原始数据'
ws_source['A1'] = '项目'
ws_source['B1'] = '数值'
ws_source.append(['A', 100])
ws_source.append(['B', 200])

# 复制工作表
ws_copy = wb.copy_worksheet(ws_source)
ws_copy.title = '备份数据'

# 修改副本不影响原件
ws_copy['A2'] = 'A(修改)'

print(f"原件A2: {ws_source['A2'].value}")
print(f"副本A2: {ws_copy['A2'].value}")

# 遍历所有工作表
print(f"\n所有工作表:")
for name in wb.sheetnames:
    sheet = wb[name]
    print(f"  {name}: {sheet.max_row}行 x {sheet.max_column}列")

wb.save('copy_sheet.xlsx')
print("复制工作表文件已保存")

输出:

代码示例

原件A2: A
副本A2: A(修改)

所有工作表:
  原始数据: 3行 x 2列
  备份数据: 3行 x 2列
复制工作表文件已保存

六、实际应用场景

  • 月度报表:每月创建一个工作表,设置不同标签颜色区分

  • 数据模板:冻结表头行,方便浏览大量数据

  • 数据备份:复制工作表创建副本,保护原始数据


七、注意事项

注意:工作表名称不能超过31个字符,不能包含\ / ? * [ ]等特殊字符

注意copy_worksheet()只复制数据和样式,不复制图表和图片

注意:删除工作表时不能删除最后一个工作表,Excel至少需要一个工作表


八、工作表操作对比

操作 方法 是否可撤销 说明
创建 create_sheet() 可删除 指定名称和位置
删除 remove() 不可撤销 至少保留一个工作表
复制 copy_worksheet() 可删除 不复制图表和图片
重命名 ws.title = '新名' 可改回 名称不能重复
冻结 freeze_panes 可取消 设置冻结位置

九、小结

  • create_sheet()创建工作表,remove()删除,copy_worksheet()复制

  • tabColor设置标签颜色,freeze_panes设置冻结窗格

  • auto_filter.ref设置自动筛选范围

  • 工作表名称有长度和字符限制,需注意校验


十、练习题

练习1

创建工作簿,添加4个工作表,分别设置红、绿、蓝、黄标签颜色

练习2

创建一个含20行数据的工作表,冻结首行,设置自动筛选

练习3

创建一个工作表并写入数据,复制该工作表,修改副本数据,验证原件不受影响

常见问题

工作表名称有哪些限制?

工作表名称不能超过31个字符,不能包含以下特殊字符:反斜杠(\)、正斜杠(/)、问号(?)、星号(*)、左中括号([)、右中括号(])。此外,名称不能为空,且同一工作簿中的工作表名称不能重复。

freeze_panes='B2'和freeze_panes='A2'有什么区别?

freeze_panes='A2'表示冻结第1行(A2上方的所有行),滚动时首行保持固定。freeze_panes='B2'表示冻结第1列和第1行(B2上方和左侧的单元格),滚动时第1列和首行都保持固定。freeze_panes='C3'则冻结前两列和前两行。

copy_worksheet()能跨工作簿复制工作表吗?

不能。copy_worksheet()只能在同一个工作簿内复制工作表。如果需要将工作表从一个工作簿复制到另一个工作簿,需要手动遍历源工作表的单元格数据,逐个复制到目标工作表中,或者使用其他方法如pandas进行数据迁移。

如何设置工作表的标签颜色?

使用ws.sheet_properties.tabColor = 'FF0000'设置标签颜色,颜色值为RGB十六进制格式(不带#号)。例如'FF0000'为红色,'00FF00'为绿色,'0000FF'为蓝色,'2196F3'为Material Design蓝色。

标签: openpyxl 工作表操作 冻结窗格 标签颜色 复制工作表 自动筛选

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python openpyxl打开工作簿教程 - load_workbook使用详解 下一篇: Python openpyxl单元格读取详解:多种读取方式与实战教程

poll相关推荐