C#代码通过Stream动态创建、加载和保存Excel文件

 更新时间:2026年08月12日 11:52:52   作者:2501_93070778  
在 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 实例。
  • 创建 MemoryStreamFileStream 对象,用于存储或读取 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 文件。
  • 创建 MemoryStreamFileStream 实例,用于加载和保存文件数据。
  • 使用 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#代码通过Stream动态创建、加载和保存Excel文件的文章就介绍到这了,更多相关C#创建 加载和保存Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C# 中的正则表达式运用

    详解C# 中的正则表达式运用

    这篇文章主要介绍了C# 中的正则表达式运用的相关资料,需要的朋友可以参考下
    2017-06-06
  • C# IsDefined的问题

    C# IsDefined的问题

    这篇文章主要介绍了C# IsDefined的问题,通俗易懂,需要的朋友可以参考下。
    2016-06-06
  • 用C#生成不重复的随机数的代码

    用C#生成不重复的随机数的代码

    我们在做能自动生成试卷的考试系统时,常常需要随机生成一组不重复的题目,在.net Framework中提供了一个专门用来产生随机数的类System.Random
    2013-02-02
  • c# openxml 删除xlsx、xls的外链示例代码

    c# openxml 删除xlsx、xls的外链示例代码

    要删除一个 Excel 文件(.xlsx)中的外部链接(external links),你可以使用 OpenXML SDK,本文演示如何使用 OpenXML SDK 删除外部链接,感兴趣的朋友一起看看吧
    2024-01-01
  • Unity3D实现飞机大战游戏(2)

    Unity3D实现飞机大战游戏(2)

    这篇文章主要为大家详细介绍了Unity3D实现飞机大战游戏的第二部分,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • 在C#中移除Word文档中的分页符的操作指南

    在C#中移除Word文档中的分页符的操作指南

    在日常的文档处理工作中,尤其是涉及自动化报告生成、多个文档合并或从模板创建新文档的场景,我们常常会遇到一个令人头疼的问题:文档中出现多余的或位置不当的分页符,所以本文介绍了如何在 C# 编程环境中高效、精确地移除 Word 文档中的分页符,需要的朋友可以参考下
    2026-02-02
  • asp.net core项目mvc权限控制:分配权限

    asp.net core项目mvc权限控制:分配权限

    学习的最好方法就是动手去做,这里以开发一个普通的权限管理系统的方式来从零体验和学习Asp.net Core。项目的整体规划大致如下
    2017-02-02
  • C#简单实现文件上传功能

    C#简单实现文件上传功能

    这篇文章主要介绍了C#简单实现文件上传功能,利用MVC+EF+LigerUI 实现的upload上传功能,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • C#打开php链接传参然后接收返回值的关键代码

    C#打开php链接传参然后接收返回值的关键代码

    这篇文章主要介绍了C#打开php链接传参然后接收返回值的关键代码,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • C#实现简单飞行棋小游戏

    C#实现简单飞行棋小游戏

    这篇文章主要为大家详细介绍了C#实现简单飞行棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03

最新评论