平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“C#代码借助Stream动态创建、加载和保存Excel文件”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
在 C# 里,开发人员能够借助流(Stream)操作动态新建、加载和保存 Excel 文件理解这一步时,,实现更加灵活高效的数据处理。这种方式无需依赖物理文件存储,有助于提升应用程序的性能和响应速度。它特别适用来实时数据处理、存储空间受限或需高效数据交换的应用场景,可进一步简化系统集成流程。
下面会介绍如何在 C# 中借助流操作新建、加载、修改和保存 Excel 文件从实现思路看,,同时以实际示例代码展示这一过程,帮助开发人员构建更灵活、可扩展的 Excel 数据处理方案。
添加 Excel 处理组件
实际处理时,首先,需在 .NET 项目中引入用来处理 Excel 文件的相关组件。您能够借助下载对应的 DLL 文件,或采用 NuGet 包管理器安装所需程序集。完成引用设置后,即可在项目里实现 Excel 文件的新建、读取、编辑和保存等操作。
PM> Install-Package Spire.XLS
动态新建 Excel 文件并保存到 Stream
理解这一步时,借助采用 .NET 中的 Excel 处理组件,开发人员能够在内存中动态新建 Excel 文件。只需初始化一个 Workbook 理解这一步时,对象,向工作簿中添加数据和格式设置,随后将其保存到 Stream 中即可。这种方式无需生成临时文件,可减少对物理存储的依赖,同时提升应用程序的性能和响应速度。
以下是在 C# 中新建 Excel 文件同时将其保存到 Stream 的步骤:
- 新建一个 Workbook 实例,用来生成新的 Excel 工作簿,其中包含默认的工作表。
- 借助 Workbook.Worksheets[] 属性拿到指定的工作表。
- 定义需写入工作表的数据,比如采用 DataTable 对数据进行组织和管理。
- 采用 Worksheet.InsertDataTable() 方法批量插入数据,或借助 Worksheet.Range[].Value 属性设置单元格内容。
- 对工作表中的单元格进行格式设置,比如调整字体、颜色、边框以及列宽等。
- 采用 Workbook.SaveToStream() 在这个场景下,方法将工作簿保存到内存流中。生成的 Stream 可用来后续处理,比如保存为文件或借助网络进行传输。
在这个场景下,这样,开发人员能够更加灵活地处理 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 dataTable = new DataTable("Data");
dataTable.Columns.Add("ID", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Age", typeof(int));
dataTable.Columns.Add("Country", typeof(string));
dataTable.Columns.Add("Salary ($)", typeof(decimal));
dataTable.Rows.Add(101, "John Smith", 28, "USA", 54000m);
dataTable.Rows.Add(102, "Maria Garcia", 34, "Spain", 65500m);
dataTable.Rows.Add(103, "Liam Johnson", 22, "Canada", 48000m);
dataTable.Rows.Add(104, "Emma Brown", 30, "Australia", 72300m);
dataTable.Rows.Add(105, "Wei Zhang", 40, "China", 58700m);
dataTable.Rows.Add(106, "Sofia Lopez", 26, "Mexico", 45200m);
// 将 DataTable 中的数据插入到工作表中
sheet.InsertDataTable(dataTable, true, 1, 1);
// 设置工作表格式
// 设置标题行样式
sheet.Rows[0].Style.Color = Color.LightGreen;
sheet.Rows[0].Style.Font.FontName = "Arial";
sheet.Rows[0].Style.Font.Size = 12f;
sheet.Rows[0].BorderAround(); // 为标题行添加边框
sheet.Rows[0].Borders.Color = Color.Blue;
// 设置数据行样式
for (int i = 1; i < sheet.AllocatedRange.Rows.Count(); i++)
{
sheet.Rows[i].Style.Color = Color.LightGray;
sheet.Rows[i].Style.Font.FontName = "Arial";
sheet.Rows[i].Style.Font.Size = 11f;
}
// 根据内容自动调整列宽
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/CreateExcelByStream.xlsx", stream.ToArray());
// 释放资源
workbook.Dispose();
}
}
}
采用 C# 从 Stream 加载和读取 Excel 文件
从实现思路看,在 C# 里,开发人员能够借助 Stream 直接加载 Excel 文件,同时对其中的数据进行读取和处理。借助将文件内容加载到内存流中,能够减少对本地文件操作的依赖,提高数据处理的灵活性和效率,适用来需更快访问和处理 Excel 数据的应用场景。
以下是在 C# 中借助 Stream 加载和读取 Excel 文件的步骤:
- 新建一个 Workbook 实例。
- 新建 MemoryStream 或 FileStream 对象,用来存储或读取 Excel 文件数据。
- 采用 Workbook.LoadFromStream() 方法从 Stream 中加载 Excel 文件。
- 借助 Workbook.Worksheets[] 属性拿到第一个工作表。
- 遍历工作表中的行和列,借助 Worksheet.AllocatedRange[].Value 属性读取单元格内容。
- 输出读取的数据,或将数据用来后续的数据处理操作。
完整示例如下所示:
using Spire.Xls;
namespace LoadExcelStream
{
class Program
{
static void Main(string[] args)
{
// 创建 Workbook 类的实例
Workbook workbook = new Workbook();
// 创建一个内存流
MemoryStream stream = new MemoryStream();
File.OpenRead("Sample.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].Text);
}
// 将当前行添加到数据列表中
data.Add(lines);
}
// 输出读取的数据,或用于后续处理
foreach (List<string> lines in data)
{
Console.WriteLine(string.Join(" | ", lines));
}
}
}
}
采用 C# 在 Stream 中修改 Excel 文件
结合项目来看,在 C# 里,开发人员能够借助 Stream 在内存中修改 Excel 文件。首先,将 Excel 文件加载到 Workbook 从实现思路看,对象中,随后对文件内容进行更新,比如修改单元格数据、调整格式等。完成修改后,能够将更新后的文件重新保存到 Stream 中。这种方式无需依赖物理文件存储,能够实现更加灵活、高效的实时数据处理。
以下是在 C# 中借助 Stream 修改 Excel 文件的步骤:
- 新建一个 Workbook 实例,用来表示需处理的 Excel 文件。
- 新建 MemoryStream 或 FileStream 实例,用来加载和保存文件数据。
- 采用 Workbook.LoadFromStream() 方法从 Stream 中加载 Excel 文件。
- 借助 Workbook.Worksheets[] 属性拿到第一个工作表。
- 采用 CellRange.Style 相关属性修改标题行和数据行的样式,比如字体、字号、背景颜色等。
- 采用 Worksheet.AutoFitColumn() 方法根据内容自动调整列宽。
- 采用 Workbook.SaveToStream() 方法将修改后的内容保存回 Stream 中。
从实现思路看,这种基于 Stream 的处理方式适用来在线编辑、数据转换以及需动态处理 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("Sample.xlsx").CopyTo(stream);
// 从流中加载 Excel 文件
workbook.LoadFromStream(stream);
// 获取工作簿中的第一个工作表
Worksheet sheet = workbook.Worksheets[0];
// 修改标题行样式
CellRange headerRow = sheet.AllocatedRange.Rows[0];
headerRow.Style.Font.FontName = "Times New Roman";
headerRow.Style.Font.Size = 12f;
headerRow.Style.Color = Color.LightBlue;
// 修改数据行样式
for (int i = 1; i < sheet.AllocatedRange.Rows.Count(); i++)
{
CellRange dataRow = sheet.AllocatedRange.Rows[i];
dataRow.Style.Font.FontName = "Arial";
dataRow.Style.Font.Size = 10f;
dataRow.Style.Color = Color.LightGray;
// 设置隔行颜色(偶数行)
if (i % 2 == 0)
{
dataRow.Style.Color = Color.LightSlateGray;
}
}
// 根据内容自动调整列宽
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/ModifyExcelByStream.xlsx", stream.ToArray());
// 释放资源
workbook.Dispose();
}
}
}
总结
落到代码里,借助 Stream 操作处理 Excel 文件,能够在不依赖本地文件存储的情况下,实现 Excel 文件的新建、加载、修改和保存。这种方式能够直接在内存中完成数据读写,有助于提升应用程序的灵活性和处理效率,特别适用来实时数据处理、文件传输以及云端应用场景。
结合项目来看,本文主要讲解了如何采用 C# 借助 Stream 动态生成 Excel 文件、从 Stream 加载同时读取 Excel 数据,以及在 Stream 中修改 Excel 文件内容。借助合理借助内存流,开发人员能够更加高效地管理 Excel 数据,并构建更加灵活、可扩展的文件处理流程。
结合项目来看,总的来说,C#新建Excel适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。