使用 Python 管理 Excel 工作表:创建、复制、删除与重命名

在 Excel 文件处理过程中,工作表(Worksheet)是组织和分隔数据的基本单元。一个 Excel 文件通常包含多个工作表,用于分别存储不同类型的数据或展示不同维度的分析结果。在自动化场景中,经常需要通过代码动态地添加、复制、隐藏、移动和删除工作表。本文将介绍如何使用 Python 实现对 Excel 工作表的全面管理。

环境准备

本文使用 Spire.XLS for Python 来操作 Excel 文件。该库提供了对工作表集合的完整操作接口,覆盖日常自动化中常见的工作表管理需求。

bash 复制代码
pip install Spire.XLS

安装完成后,通过 spire.xls 模块即可访问相关 API。

添加工作表

添加工作表是最基础的操作。通过 Workbook 对象访问 Worksheets 集合,调用 Add() 方法并指定工作表名称即可创建新的工作表。

python 复制代码
from spire.xls import *

# 创建工作簿对象
workbook = Workbook()

# 添加一个名为 "DataSheet" 的新工作表
sheet = workbook.Worksheets.Add("DataSheet")

# 在新工作表中写入数据
sheet.Range["A1"].Text = "这是新添加的工作表"

# 保存文件
workbook.SaveToFile("AddWorksheet.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

Add() 方法返回新创建的工作表对象,可以直接对其进行数据写入和格式设置。新工作表默认被添加到所有现有工作表的末尾。

复制工作表

复制工作表分为两种场景:在同一工作簿内复制,以及跨工作簿复制。

同一工作簿内复制

在同一工作簿中复制工作表时,需要先将源工作表的数据范围取出,再复制到目标工作表:

python 复制代码
from spire.xls import *

workbook = Workbook()
workbook.LoadFromFile("Template.xlsx")

# 获取源工作表
sourceSheet = workbook.Worksheets[0]

# 创建目标工作表
targetSheet = workbook.Worksheets.Add("CopyOfSource")

# 复制数据
sourceRange = sourceSheet.AllocatedRange
targetSheet.CopyFrom(sourceRange, targetSheet, targetSheet.FirstRow, targetSheet.FirstColumn, True)

workbook.SaveToFile("CopyWithinWorkbook.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

CopyFrom() 方法的最后一个参数控制是否同时复制格式。设为 True 时,数据、样式、合并单元格等信息都会被完整复制。

跨工作簿复制

跨工作簿复制允许将一个 Excel 文件中的工作表内容复制到另一个文件中:

python 复制代码
from spire.xls import *

# 加载源文件
sourceWorkbook = Workbook()
sourceWorkbook.LoadFromFile("Source.xlsx")
srcSheet = sourceWorkbook.Worksheets[0]

# 加载目标文件
targetWorkbook = Workbook()
targetWorkbook.LoadFromFile("Target.xlsx")

# 在目标文件中添加新工作表并复制内容
targetSheet = targetWorkbook.Worksheets.Add("ImportedSheet")
targetSheet.CopyFrom(srcSheet)

targetWorkbook.SaveToFile("CopyAcrossWorkbooks.xlsx", ExcelVersion.Version2013)
targetWorkbook.Dispose()
sourceWorkbook.Dispose()

这种方式在数据汇总场景中非常实用,例如将多个部门的数据表合并到一个汇总文件中。

隐藏和显示工作表

在某些情况下,需要隐藏包含辅助数据或中间计算结果的工作表,使文件使用者只看到关键信息。通过设置工作表的 Visibility 属性可以控制其可见性:

python 复制代码
from spire.xls import *

workbook = Workbook()
workbook.LoadFromFile("MultiSheet.xlsx")

# 隐藏指定工作表
workbook.Worksheets["CalcSheet"].Visibility = WorksheetVisibility.Hidden

# 显示被隐藏的工作表
workbook.Worksheets["Report"].Visibility = WorksheetVisibility.Visible

workbook.SaveToFile("HideShowSheet.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

WorksheetVisibility 枚举提供 HiddenVisible 两个值。隐藏工作表并不会删除其内容,数据仍然保留,只是在 Excel 界面中不可见。

移动工作表

当工作表的排列顺序需要调整时,可以使用 MoveWorksheet() 方法将其移动到指定位置:

python 复制代码
from spire.xls import *

workbook = Workbook()
workbook.LoadFromFile("MultiSheet.xlsx")

# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 将其移动到第 3 个位置(索引从 0 开始)
sheet.MoveWorksheet(2)

workbook.SaveToFile("MoveSheet.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

MoveWorksheet() 接收一个整数参数,表示目标位置的索引。移动操作不会改变工作表的内容和数据,只调整其在标签栏中的排列顺序。

删除工作表

当工作表不再需要时,可以通过索引或名称将其从工作簿中移除:

python 复制代码
from spire.xls import *

workbook = Workbook()
workbook.LoadFromFile("MultiSheet.xlsx")

# 通过索引删除工作表
workbook.Worksheets.RemoveAt(1)

# 也可以通过名称删除
# workbook.Worksheets.Remove("TempSheet")

workbook.SaveToFile("RemoveSheet.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

删除操作是不可逆的,执行后工作表及其所有数据将被永久移除。在批量删除前,建议先通过遍历获取所有工作表名称进行确认。

设置工作表标签颜色

为不同工作表的标签设置颜色,可以在视觉上快速区分各类数据表,提升文件的可读性:

python 复制代码
from spire.xls import *

workbook = Workbook()
workbook.LoadFromFile("MultiSheet.xlsx")

# 为不同工作表设置标签颜色
workbook.Worksheets[0].TabColor = Color.get_Red()
workbook.Worksheets[1].TabColor = Color.get_Green()
workbook.Worksheets[2].TabColor = Color.get_LightBlue()

workbook.SaveToFile("TabColor.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

TabColor 属性接受 Color 对象,可以使用预定义颜色(如 RedGreenLightBlue)或自定义 RGB 值。

冻结窗格

冻结窗格可以在滚动时保持标题行或列始终可见,是处理大型数据表时的常用设置:

python 复制代码
from spire.xls import *

workbook = Workbook()
workbook.LoadFromFile("DataSheet.xlsx")

sheet = workbook.Worksheets[0]

# 冻结首行(第 2 行第 1 列以上的区域被冻结)
sheet.FreezePanes(2, 1)

workbook.SaveToFile("FreezePanes.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

FreezePanes() 方法接收两个参数:行号和列号。指定位置上方和左侧的区域将被冻结。例如 FreezePanes(2, 1) 冻结第 1 行,FreezePanes(1, 2) 冻结第 1 列,FreezePanes(3, 2) 则同时冻结前 2 行和前 1 列。

获取所有工作表名称

在自动化流程中,经常需要先获取文件中所有工作表的名称,以便进行后续操作:

python 复制代码
from spire.xls import *

workbook = Workbook()
workbook.LoadFromFile("MultiSheet.xlsx")

# 遍历并获取所有工作表名称
for sheet in workbook.Worksheets:
    print(sheet.Name)

workbook.Dispose()

这个操作常用于动态生成工作表列表、按名称查找特定工作表,或在批量处理前进行数据校验。

总结

本文介绍了使用 Python 管理 Excel 工作表的核心操作,包括添加、复制、隐藏、移动、删除工作表,以及设置标签颜色和冻结窗格。这些操作覆盖了日常 Excel 自动化中最常见的工作表管理需求。

关键要点回顾:

  1. 使用 Worksheets.Add() 添加新工作表
  2. 通过 CopyFrom() 实现工作表内容的复制,支持同工作簿和跨工作簿场景
  3. Visibility 属性控制工作表的显示与隐藏
  4. MoveWorksheet() 调整工作表排列顺序
  5. FreezePanes() 设置冻结窗格,提升大数据表的可读性

在此基础上,可以进一步结合数据写入、格式设置和文件转换等功能,构建完整的 Excel 自动化处理流程。

相关推荐
lizhongxuan1 小时前
Agent Tool
后端
CaffeinePro2 小时前
依赖注入:FastAPI最核心的解耦能力案例解析
后端·fastapi
Assby3 小时前
从 Function Calling 到 MCP:理解 Agent 工具调用的底层通信机制
人工智能·后端
打字机v3 小时前
创建第一个spring-boot项目
后端
像我这样帅的人丶你还3 小时前
Java 后端详解(三):全局异常处理与 JPA 数据库映射
java·后端
前端Hardy3 小时前
又一个 AI 神器火了!
前端·javascript·后端
神奇小汤圆4 小时前
面试被问烂的Java虚拟机调优,我用一个实战案例给你讲得明明白白
后端
明月_清风5 小时前
开发者网络概念全扫盲:一篇搞定
后端·网络协议
明月_清风5 小时前
零信任入门:从"城堡护城河"到"每次进门都要刷卡"
后端