.NET平台用C#通过字节流动态操作Excel文件
在.NET开发中,通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据。这种方法允许开发者直接在内存中创建、修改和保存Excel文档,无需依赖直接的文件储存、读取操作,从而提高了程序的性能和安全性。使用流技术处理Excel不仅简化了数据操作流程,还支持更简便的并发处理和临时数据管理,使应用程序能够更好地适应各种数据处理需求。本文将演示如何在.NET平台使用C#通过字节流创建、读取、编辑及保存Excel文件。
本文所使用的方法需要用到免费的Free Spire.XLS for .NET,NuGet:Install-Package FreeSpire.XLS
。
用C#创建并保存Excel工作簿为字节流
我们可以通过创建Workbook
实例直接创建Excel工作簿,然后在其中添加数据及设置格式,最后使用Workbook.SaveToStream()
方法将其保存为字节流。注意新建的Excel工作簿包含三个默认的工作表。以下是操作步骤示例:
- 创建
Workbook
实例。 - 通过
Workbook.Worksheets[]
属性访问工作簿。 - 定义或读取用于制作表格数据,如使用
DataTable
创建一个数据表。 - 使用
Workbook.InsertDataTable()
插入数据到工作表中,或通过Worksheet.Range[].Value
属性直接为单元格添加数据。 - 通过
CellRange.Style
中的属性为单元格设置格式。 - 使用
Worksheet.AutoFitColumn()
方法自动调整列宽。 - 使用
Workbook.SaveToStream()
方法将Excel工作簿保存到新建的字节流或已有的字节流。
代码示例
using Spire.Xls;
using System.Data;
using System.Drawing;
namespace CreateExcelStream
{
class Program
{
static void Main(string[] args)
{
// 创建一个新的工作簿实例
Workbook workbook = new Workbook();
// 获取工作簿中的第一个工作表
Worksheet sheet = workbook.Worksheets[0];
// 创建并填充一个包含示例数据的 DataTable
DataTable table = new DataTable("员工信息");
table.Columns.Add("ID", typeof(int));
table.Columns.Add("姓名", typeof(string));
table.Columns.Add("性别", typeof(string));
table.Columns.Add("职位", typeof(string));
table.Columns.Add("部门", typeof(string));
table.Columns.Add("工资", typeof(decimal));
table.Columns.Add("入职日期", typeof(DateTime));
table.Rows.Add(1, "张伟", "男", "软件工程师", "研发部", 75000, DateTime.Parse("2020-03-15"));
table.Rows.Add(2, "李娜", "女", "项目经理", "项目管理办公室", 85000, DateTime.Parse("2019-06-22"));
table.Rows.Add(3, "王芳", "女", "用户体验设计师", "设计部", 70000, DateTime.Parse("2021-04-05"));
table.Rows.Add(4, "赵强", "男", "系统分析师", "信息技术部", 80000, DateTime.Parse("2018-07-11"));
table.Rows.Add(5, "孙丽", "女", "市场营销专员", "市场部", 60000, DateTime.Parse("2022-01-03"));
table.Rows.Add(6, "周勇", "男", "销售代表", "销售部", 65000, DateTime.Parse("2020-09-10"));
table.Rows.Add(7, "吴敏", "女", "财务会计", "财务部", 72000, DateTime.Parse("2017-11-28"));
table.Rows.Add(8, "郑涛", "男", "人力资源经理", "人力资源部", 82000, DateTime.Parse("2016-05-18"));
table.Rows.Add(9, "冯静", "女", "法律顾问", "法务部", 90000, DateTime.Parse("2015-02-14"));
table.Rows.Add(10, "陈浩", "男", "首席执行官", "高层管理", 120000, DateTime.Parse("2014-08-01"));
// 将 DataTable 中的数据插入到工作表中
sheet.InsertDataTable(table, true, 1, 1);
// 格式化工作表
// 设置表头行的样式
sheet.Rows[0].Style.Color = Color.FromArgb(229, 243, 251);
sheet.Rows[0].Style.Font.FontName = "宋体";
sheet.Rows[0].Style.Font.Size = 14f;
sheet.Rows[0].BorderAround(); // 给表头行添加外边框
sheet.Rows[0].Borders.Color = Color.FromArgb(180, 180, 180); // 设置边框颜色
// 设置数据行的样式
for (int i = 1; i < sheet.AllocatedRange.Rows.Count(); i++)
{
sheet.Rows[i].Style.Color = Color.FromArgb(247, 252, 255);
sheet.Rows[i].Style.Font.FontName = "宋体";
sheet.Rows[i].Style.Font.Size = 12f;
// 更改偶数行背景色
if ((i + 1) %2 == 0)
{
sheet.Rows[i].Style.Color = Color.FromArgb(255, 255, 255);
}
}
sheet.Range[2, 1, sheet.Rows.Count(), sheet.Columns.Count()].BorderInside(); // 添加数据行单元格内边框
sheet.Range[2, 1, sheet.Rows.Count(), sheet.Columns.Count()].Borders.Color = Color.FromArgb(220, 220, 220); // 设置边框颜色
// 调整列宽以适应内容
for (int j = 1; j <= sheet.AllocatedRange.Columns.Count(); j++)
{
sheet.AutoFitColumn(j);
}
// 将工作簿保存到内存流
MemoryStream stream = new MemoryStream();
workbook.SaveToStream(stream, FileFormat.Version2016);
// 将流内容写入到文件
File.WriteAllBytes("output/通过流创建Excel文件.xlsx", stream.ToArray());
// 释放资源
workbook.Dispose();
}
}
}
结果
用C#通过字节流直接读取Excel文件数据
我们可以使用Workbook.LoadFromStream()
将Excel文件流载入到Workbook
实例,然后使用Workbook.Worksheets[]
属性访问工作表以及Worksheet.Range[].Value
属性访问单元格数据,从而直接读取其数据用于进行进一步操作。以下是操作步骤示例:
- 创建
Workbook
实例。 - 使用
Workbook.LoadFromStream()
方法从新建的字节流或已有的字节流载入Excel工作簿。 - 通过
Workbook.Worksheets[]
属性访问指定工作表。 - 遍历工作表已使用的单元格范围的行和列,通过
Worksheet.Range[].Value
属性获取单元格数据。 - 输出获取到的数据,或将数据用于其他操作。
代码示例
using Spire.Xls;
namespace LoadExcelStream
{
class Program
{
static void Main(string[] args)
{
// 创建一个 Workbook 类的实例
Workbook workbook = new Workbook();
// 创建一个内存流
MemoryStream stream = new MemoryStream();
File.OpenRead("output/通过流创建Excel文件.xlsx").CopyTo(stream);
// 从内存流加载 Excel 文件
workbook.LoadFromStream(stream);
// 获取工作簿中的第一个工作表
Worksheet sheet = workbook.Worksheets[0];
// 初始化一个列表,用于存储从工作表中提取的数据
List<List<string>> data = new List<List<string>>();
for (int i = 0; i < sheet.AllocatedRange.Rows.Count(); i++)
{
// 创建一个列表来存储每行数据
List<string> lines = new List<string>();
for (int j = 0; j < sheet.AllocatedRange.Columns.Count(); j++)
{
// 获取单元格的值并添加到当前行的列表中
lines.Add(sheet.AllocatedRange[i + 1, j + 1].Value);
}
// 将当前行的数据添加到数据列表中
data.Add(lines);
}
// 打印提取的数据,或将其用于后续操作
foreach (List<string> lines in data)
{
Console.WriteLine(string.Join(" | ", lines));
}
}
}
}
结果
用C#通过字节流编辑Excel工作簿
通过使用Workbook
的LoadFromStream
方法,我们可以从字节流载入Excel工作簿,然后再使用库中的其他方法和属性对工作簿内容进行编辑。在完成编辑后,再使用SaveToStream
方法将工作簿保存回字节流,就可以实现只通过字节流对Excel文件进行编辑操作。以下是操作步骤示例:
- 创建
Workbook
实例。 - 使用
Workbook.LoadFromStream()
方法从新建的字节流或已有的字节流载入Excel工作簿。 - 通过
Workbook.Worksheets[]
属性访问指定工作表。 - 通过
CellRange
的Style
、Value
等属性对单元格或单元格范围进行编辑。 - 使用使用
Workbook.SaveToStream()
方法将Excel工作簿保存回字节流。 - 释放资源。
代码示例
using Spire.Xls;
using System.Drawing;
namespace ModifyExcelStream
{
class Program
{
static void Main(string[] args)
{
// 创建 Workbook 类的一个新实例
Workbook workbook = new Workbook();
// 创建一个内存流
MemoryStream stream = new MemoryStream();
File.OpenRead("output/通过流创建Excel文件.xlsx").CopyTo(stream);
// 从内存流加载 Excel 文件
workbook.LoadFromStream(stream);
// 获取工作簿中的第一个工作表
Worksheet sheet = workbook.Worksheets[0];
// 修改表头行的样式
CellRange headerRow = sheet.AllocatedRange.Rows[0];
headerRow.Style.Font.FontName = "黑体";
headerRow.Style.Font.Size = 12f;
headerRow.Style.Color = Color.FromArgb(108, 91, 123);
headerRow.Borders.Color = Color.FromArgb(255, 255, 255);
// 修改数据行的样式
for (int i = 1; i < sheet.AllocatedRange.Rows.Count(); i++)
{
CellRange dataRow = sheet.AllocatedRange.Rows[i];
dataRow.Style.Font.FontName = "黑体";
dataRow.Style.Font.Size = 10f;
dataRow.Style.Color = Color.FromArgb(255, 204, 128);
dataRow.Borders.Color = Color.FromArgb(158, 158, 158);
// 更改着色(偶数行)
if (i % 2 == 0)
{
dataRow.Style.Color = Color.FromArgb(129, 222, 227);
}
}
// 自动调整列宽以适应内容
for (int k = 1; k <= sheet.AllocatedRange.Columns.Count(); k++)
{
sheet.AutoFitColumn(k);
}
// 修改边框颜色
sheet.AllocatedRange.Style.Borders.Color = Color.White;
// 将修改后的工作簿保存回内存流
workbook.SaveToStream(stream);
// 将流内容写入到一个新文件
File.WriteAllBytes("output/通过流修改Excel文件.xlsx", stream.ToArray());
// 释放资源
workbook.Dispose();
}
}
}
结果
本文演示了如何在.NET平台使用C#通过字节流创建、读取、编辑及保存Excel工作簿。
原文地址:https://blog.csdn.net/Eiceblue/article/details/144772712
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!