当前位置: 首页 > news >正文

使用 C# 操作 Excel 工作表:添加、删除、复制、移动、重命名

在日常开发中,我们经常需要对 Excel 文件进行各种操作,而不仅仅是写入或读取数据。比如在处理报表时,可能需要 添加新的工作表、删除不需要的表、复制或移动表格内容,甚至对工作表进行重命名和调整顺序。掌握这些操作能让你的 Excel 文件更加灵活,结构更清晰。

本文演示如何在 同一个工作簿内 完成多种工作表管理操作,包括添加、删除、复制、移动、重命名以及移动工作表。所有操作都基于同一个示例文件,便于截图展示效果。

本文使用免费的 Free Spire.XLS for .NET,可通过 NuGet 安装:

Install-Package FreeSpire.XLS

1. 初始化工作簿

新建的 Workbook 默认包含三个工作表(Sheet1、Sheet2、Sheet3)。我们从这里开始操作。

using Spire.Xls;
using System.Drawing;Workbook workbook = new Workbook();
Worksheet sheet1 = workbook.Worksheets[0];
sheet1.Name = "默认工作表1";
sheet1.Range["A1"].Text = "这是第一个默认工作表";

说明

  • Workbook 类表示 Excel 文件。
  • Worksheets 集合存放了该工作簿中的所有工作表。
  • 默认就有三个工作表,不需要手动添加。

2. 添加工作表

可以通过 Worksheets.Add() 方法添加新的工作表。

Worksheet newSheet = workbook.Worksheets.Add("新增工作表");
newSheet.Range["A1"].Text = "这是新建的工作表";

应用场景

  • 在现有报表中扩展新的数据区。
  • 生成临时的计算表或结果表。

3. 删除工作表

如果不需要某个工作表,可以直接删除。这里我们删除第三个默认工作表(Sheet3)。

workbook.Worksheets[2].Remove();  // 删除第三个默认工作表

说明:删除后,工作簿中的工作表总数会减少,后续的索引也会自动调整。


4. 复制工作表

复制一个已有的工作表到新的位置。这里我们复制第一个工作表。

Worksheet copiedSheet = workbook.Worksheets.Add("复制的表");
copiedSheet.CopyFrom(sheet1);
copiedSheet.Range["A2"].Text = "这是复制自第一个工作表的副本";

场景

  • 保留原始表的同时,生成一个副本用于实验或修改。
  • 避免重复手动设置表格格式。

5. 移动工作表

可以改变工作表在工作簿中的顺序。这里把“新增工作表”移动到第一个位置。

Worksheet sheetToMove = workbook.Worksheets["新增工作表"];
sheetToMove.MoveWorksheet(0);  // 移动到第一个位置

说明MoveWorksheet() 方法允许把指定的表移动到目标索引位置。索引从 0 开始。


6. 重命名工作表

工作表命名在报表管理中非常重要,合理命名有助于区分内容。这里我们把第二个工作表改名为“销售数据”。

workbook.Worksheets[2].Name = "销售数据";
workbook.Worksheets[2].Range["A1"].Text = "这里是销售数据表";

场景:将默认的 “Sheet1”、“Sheet2” 改为业务相关的名称,如“财务报表”、“年度统计”。


7. 复制内容到其他工作表

除了移动整个工作表,也可以将某些单元格区域复制或移动到其他表。这里我们将“销售数据”的 A2:C3 区域复制到“复制数据工作表”的 A2 开始的区域。

Worksheet source = workbook.Worksheets["销售数据"];
Worksheet target = workbook.Worksheets.Add("复制数据工作表");
target.Range["A1"].Text = "这是用于复制数据的工作表";// 在源表中填充一些示例数据
source.Range["A2"].Text = "产品";
source.Range["B2"].Text = "数量";
source.Range["C2"].Text = "金额";
source.Range["A3"].Text = "电脑";
source.Range["B3"].NumberValue = 10;
source.Range["C3"].NumberValue = 50000;
source.Range["A2:C3"].Style.Color = Color.LightGray;// 将源表的 A1:C2 区域复制到目标表的 A1
source.Range["A2:C3"].Copy(target.Range["A2"]);

说明

  • 使用 Copy() 可以将区域内容(包括数据与格式)复制到另一个表。
  • 适合拆分数据或汇总数据时使用。

10. 将工作表复制到其他工作簿

有时我们需要将某个工作表从当前工作簿转移到另一个文件中,便于拆分数据或单独保存。下面演示如何把“销售数据”工作表复制到新的工作簿,并保存为单独文件。

// 获取要复制的工作表
Worksheet sheetToCopy = workbook.Worksheets["销售数据"];// 新建一个目标工作簿
Workbook newWorkbook = new Workbook();// 清空默认生成的工作表,避免混乱
newWorkbook.Worksheets.Clear();// 在新工作簿中添加并复制工作表
Worksheet newSheet1 = newWorkbook.Worksheets.Add("销售数据副本");
newSheet1.CopyFrom(sheetToCopy);// 删除原工作表即可完成移动
//sheetToCopy.Remove();

说明

  • newWorkbook.Worksheets.Clear() 用于清空新建工作簿中默认的三个工作表。
  • CopyFrom() 可以完整复制源表的数据和格式。
  • 删除原工作表即可完成移动操作工作表到新工作簿的操作。

8. 保存文件

最后,将工作簿保存为 Excel 文件以便查看结果。

workbook.SaveToFile("工作表操作示例.xlsx", ExcelVersion.Version2016);
newWorkbook.SaveToFile("复制到新工作簿示例.xlsx", ExcelVersion.Version2016);

生成的文件中包含:

  • 已新增、复制和重命名的工作表;
  • 删除了一个不需要的默认表;
  • 调整了工作表顺序;
  • 复制了部分单元格到其他工作表。

生成的 Excel 工作簿预览:

使用C#新建、移动、复制、重命名Excel工作表

复制的新工作簿预览:

C#复制工作表到其他Excel工作簿


9. 关键方法总结

操作类型方法/属性说明
添加表Worksheets.Add("name")新建一个工作表
删除表Worksheets[index].Remove()删除指定索引的工作表
复制表copiedSheet.CopyFrom(sourceSheet)将现有工作表复制到新表
移动表Worksheet.MoveWorksheet(positionIndex)调整工作表在工作簿中的顺序
重命名表Worksheet.Name设置或获取工作表的名称
移动单元格sourceRange.Copy(targetRange)将指定单元格区域复制到其他表

通过以上操作,你已经可以灵活地用 C# 操作 Excel 工作簿中的工作表。这些操作在日常文档管理和自动化处理中非常实用,能让 Excel 文件的组织更加清晰高效。

更多 Excel 文件操作技巧请查看 Spire.XLS for .NET 教程。

http://www.dtcms.com/a/390514.html

相关文章:

  • Python 高效实现 Excel 转 PDF: 不依赖Office
  • Ubuntu25.04通过Docker编译Sunshine记录
  • WebRTC 如何实现的低延迟和高带宽利用率
  • Python接口自动化浅析unittest单元测试原理
  • 【附源码】基于SpringBoot的新能源汽车销售管理系统的设计与实现
  • 虚拟机Ubuntu挂载共享文件夹
  • JS实现房贷计算器和购物车页面
  • 【开题答辩全过程】以 Android安全网购平台为例,包含答辩的问题和答案
  • 期权市场反常信号是什么?
  • 【SpringBoot】26 核心功能 - Web开发原理 - Spring Boot 中定制 Servlet 容器
  • java spring boot 搭建项目
  • 【一文了解】闭包
  • 深入解析Mysql数据库并发:从读写机制到多版本控制
  • Python自学20 - Python操作PDF文件
  • Windows 本地 UV 环境部署 Index-TTS2 实战:基于 EPGF 架构的完整指南(支持 DeepSpeed + FP16)
  • 【cpp Trip第4站】函数参数传递
  • 【Spotfire】实现错行效果
  • 【Day 61】Linux-haproxy负载均衡
  • 搭建线上线下融合的商城小程序,关键步骤有哪些?
  • 软件测试教程资源合集
  • Proteus(8.17)SP2 仿真下载安装过程(附详细安装过程图)
  • 微软获评 2025 Gartner 云原生应用平台魔力象限 领导者
  • Java 生态监控体系实战:Prometheus+Grafana+SkyWalking 整合全指南(一)
  • 【学习】响应系统
  • Linux网络:socket网络套接字
  • 知识图谱对人工智能中自然语言处理的深层语义分析的影响与启示
  • 从车间到云端:Kepware如何加速IIoT落地
  • MyISAM 与 InnoDB 深度对比:如何正确选择 MySQL 存储引擎
  • 串口无线数传模块实现化工园区与3公里外水泵PLC无线通讯实现设备数据传输
  • rook-ceph自定义添加osd流程