查看: 110|回复: 3

Python操作Excel工作表:Spire.XLS实现创建、复制、隐藏、移动与删除

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
在Excel文件自动化处理中,工作表(Worksheet)是最基本的数据组织单元。通过Python脚本动态管理工作表——添加、复制、隐藏、移动、删除等——可以大幅提升数据整理和报表生成的效率。本文使用Spire.XLS for Python库(通过pip install Spire.XLS安装),演示如何用代码完成这些常见操作。

一、环境准备

安装Spire.XLS库后,通过spire.xls模块导入相关类。示例中所有代码均基于该库,操作流程为:创建Workbook对象 → 加载或新建文件 → 操作Worksheets集合 → 保存并释放资源。

二、添加工作表

使用Workbook的Worksheets.Add(name)方法添加新工作表,返回新工作表对象,可立即写入数据。默认新表添加在末尾。
  1. from spire.xls import *
  2. workbook = Workbook()
  3. sheet = workbook.Worksheets.Add("DataSheet")
  4. sheet.Range["A1"].Text = "这是新添加的工作表"
  5. workbook.SaveToFile("AddWorksheet.xlsx", ExcelVersion.Version2013)
  6. workbook.Dispose()
复制代码

三、复制工作表

复制分为同一工作簿内复制和跨工作簿复制两种场景。

1. 同一工作簿内复制

通过CopyFrom方法将源工作表的数据和格式复制到新创建的目标工作表中。最后一个布尔参数控制是否复制格式(设为True)。
  1. workbook = Workbook()
  2. workbook.LoadFromFile("Template.xlsx")
  3. sourceSheet = workbook.Worksheets[0]
  4. targetSheet = workbook.Worksheets.Add("CopyOfSource")
  5. sourceRange = sourceSheet.AllocatedRange
  6. targetSheet.CopyFrom(sourceRange, targetSheet, targetSheet.FirstRow, targetSheet.FirstColumn, True)
  7. workbook.SaveToFile("CopyWithinWorkbook.xlsx", ExcelVersion.Version2013)
  8. workbook.Dispose()
复制代码

2. 跨工作簿复制

先加载源文件和目标文件,在目标文件内添加新工作表,然后直接CopyFrom源工作表对象即可。适用于数据汇总场景。
  1. sourceWorkbook = Workbook()
  2. sourceWorkbook.LoadFromFile("Source.xlsx")
  3. srcSheet = sourceWorkbook.Worksheets[0]
  4. targetWorkbook = Workbook()
  5. targetWorkbook.LoadFromFile("Target.xlsx")
  6. targetSheet = targetWorkbook.Worksheets.Add("ImportedSheet")
  7. targetSheet.CopyFrom(srcSheet)
  8. targetWorkbook.SaveToFile("CopyAcrossWorkbooks.xlsx", ExcelVersion.Version2013)
  9. targetWorkbook.Dispose()
  10. sourceWorkbook.Dispose()
复制代码

四、隐藏和显示工作表

通过设置工作表的Visibility属性控制可见性。使用WorksheetVisibility枚举中的Hidden或Visible。隐藏后数据保留,仅在Excel界面不可见。
  1. workbook = Workbook()
  2. workbook.LoadFromFile("MultiSheet.xlsx")
  3. workbook.Worksheets["CalcSheet"].Visibility = WorksheetVisibility.Hidden
  4. workbook.Worksheets["Report"].Visibility = WorksheetVisibility.Visible
  5. workbook.SaveToFile("HideShowSheet.xlsx", ExcelVersion.Version2013)
  6. workbook.Dispose()
复制代码

五、移动工作表

使用工作表的MoveWorksheet(index)方法调整其在标签栏中的顺序。参数为目标位置索引(从0开始)。
  1. sheet = workbook.Worksheets[0]
  2. sheet.MoveWorksheet(2)
复制代码

六、删除工作表

通过索引或名称从集合中移除工作表,操作不可逆。建议先获取所有工作表名称确认后再删除。
  1. workbook.Worksheets.RemoveAt(1)
  2. # 或 workbook.Worksheets.Remove("TempSheet")
复制代码

七、设置工作表标签颜色

为工作表TabColor属性赋值Color对象,预定义颜色如Red、Green、LightBlue,也可使用RGB值。
  1. workbook.Worksheets[0].TabColor = Color.get_Red()
  2. workbook.Worksheets[1].TabColor = Color.get_Green()
复制代码

八、冻结窗格

FreezePanes(row, column)方法冻结指定单元格上方和左侧的区域。例如FreezePanes(2,1)冻结首行。
  1. sheet.FreezePanes(2, 1)
复制代码

九、获取所有工作表名称

遍历Worksheets集合,读取Name属性。常用于动态生成列表或数据校验。
  1. for sheet in workbook.Worksheets:
  2.     print(sheet.Name)
复制代码

总结:Spire.XLS for Python提供了完整的工作表管理API,覆盖日常自动化中的大部分场景。开发者可根据需求组合使用上述操作,构建灵活的数据处理流程。
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python操作Excel工作表:Spire.XLS实现创建、复制、隐藏、移动与删除

感谢分享!Spire.XLS 这个库我之前在 .NET 里用过,没想到 Python 版也把工作表操作封装得这么完整。特别是跨工作簿复制那一段,对数据合并场景很实用。有个小问题想请教:用 `MoveWorksheet` 调整顺序时,如果目标索引超出了当前工作表总数,会报错还是自动追加到末尾?有时候批量操作时担心索引越界。另外,隐藏工作表后通过 `SaveToFile` 保存,再打开 Excel 文件,工作表确实不显示对吧?之前试过别的库隐藏后重新打开又自动显示了,有点困惑。期待你的经验分享。
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python操作Excel工作表:Spire.XLS实现创建、复制、隐藏、移动与删除

感谢分享这么详细的Spire.XLS工作表操作教程!正好最近在处理多个Excel报表合并的工作,复制和移动工作表的功能很实用。请问在跨工作簿复制时,如果源文件有多个工作表,是只能一个个复制吗?库有没有一次性复制全部工作表的方法?
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python操作Excel工作表:Spire.XLS实现创建、复制、隐藏、移动与删除

感谢分享,非常实用的教程!Spire.XLS 的 API 设计得很直观,尤其 `CopyFrom` 和 `Visibility` 这些方法直接对应 Excel 原生操作,比直接用 openpyxl 处理格式和跨工作簿复制要省事不少。想问一下,你在实际使用中遇到过 `.xls` 格式(老版 Excel)的兼容问题吗?因为教程里保存用的是 `Version2013`,如果输入文件是旧格式,加载和保存时需不需要额外处理?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-28 11:46 , Processed in 0.030015 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部