.NET利用C#字节流动态操作Excel文件

2024-12-28 22:50

本文主要是介绍.NET利用C#字节流动态操作Excel文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《.NET利用C#字节流动态操作Excel文件》在.NET开发中,通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据,本文将演示如何在.NET平台使用C#通过字节流创建,读取,编辑及保...

在.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, DatpythoneTime.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.FromAChina编程rgb(247, 252, 255);
                sheet.Rows[i].StylChina编程e.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();
        }
    }
}

结果

.NET利用C#字节流动态操作Excel文件

用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<striphpng> lines in data)
            {
                Console.WriteLine(string.Join(" | ", lines));
            }
        }
    }
}

结果

.NET利用C#字节流动态操作Excel文件

用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文件

到此这篇关于.NET利用C#字节流动态操作Excel文件的文章就介绍到这了,更多相关C#字节流动态操作Excel内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于.NET利用C#字节流动态操作Excel文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1152820

相关文章

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配

Python自动化办公之合并多个Excel

《Python自动化办公之合并多个Excel》在日常的办公自动化工作中,尤其是处理大量数据时,合并多个Excel表格是一个常见且繁琐的任务,下面小编就来为大家介绍一下如何使用Python轻松实现合... 目录为什么选择 python 自动化目标使用 Python 合并多个 Excel 文件安装所需库示例代码

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr