C# Excel操作类EPPlus

2024-06-09 10:28
文章标签 c# excel 操作 .net netcore epplus

本文主要是介绍C# Excel操作类EPPlus,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要


EPPlus 是一个流行的用于操作 Excel 文件的开源库,适用于 C# 和 .NET 环境。它提供了丰富的功能,能够轻松地读取、写入和格式化 Excel 文件,使得在 C# 中进行 Excel 文件处理变得更加简单和高效。EPPlus 不需要安装 Microsoft Office 或 Excel,因为它完全是用 C# 编写的,并且直接操作 Excel 文件的数据。

支持 Excel 文件格式:EPPlus 支持读取和写入 Office Open XML (XLSX) 格式的 Excel 文件,这是 Microsoft Excel 2007 及以后版本的默认文件格式。它不支持旧的二进制格式(XLS)

正文


EPPlus 是在 MIT 许可下发布的开源项目,因此你可以免费使用和修改它,也可以将其用于商业项目。它的源代码也是公开可用的,你可以自由查看和学习其中的实现细节。

Nuget 安装epplus,这里版本选上我基本就是5.0以前的够用了。

图片

Announcement: This is the last version of EPPlus under the LGPL License

EPPlus will from version 5 be licensed under the Polyform Noncommercial 1.0.0 license.

With the new license EPPlus is still free to use in some cases, but will require a commercial license to be used in a commercial business.

More information on the license change on our website

常用方法:

Load:将已有的 Excel 文件加载到 ExcelPackage 对象中。

ExcelPackage package = new ExcelPackage();package.Load(FileInfo file);

Save:保存ExcelPackage对象到文件或流。​​​​​​​

package.SaveAs(FileInfo file);package.SaveAs(Stream stream);

获取值:获取单元格的值。

object value = worksheet.Cells[row, column].Value;
设置值:设置单元格的值。
worksheet.Cells[row, column].Value = value;
常用属性:

获取 ExcelWorkbook 对象,表示工作簿。

ExcelWorkbook workbook = package.Workbook;
工作表:获取工作簿中的工作表集合。
ExcelWorksheets worksheets = workbook.Worksheets;
单元格:获取工作表中的单元格集合。
ExcelRange cells = worksheet.Cells;
值:获取或设置单元格的值。​​​​​​​
object value = cell.Value;cell.Value = value;

地址:获取单元格或范围的地址。

string address = cell.Address;
先做一个导入的例子

图片

导入这样一个全国的省市信息​​​​​​​
private void Import(){    lsvMain.Items.Clear();      string filePath = "./地区.xlsx";
    // 检查文件是否存在    if (!File.Exists(filePath))    {        MessageBox.Show($"文件没有找到{filePath}");        return;    }
    // 使用 EPPlus 打开 Excel 文件    using (var package = new ExcelPackage(new FileInfo(filePath)))    {        // 获取工作表        // 可以用Sheet的索引package.Workbook.Worksheets[0];         // 也可用Sheet名字        ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"]; 
        // 获取工作表的行数和列数,在实际工作中,用户给的excel不规范,        // 可能需要通过固定列数,行数通过某些列为空判断结束        int rowCount = worksheet.Dimension.Rows;        int columnCount = worksheet.Dimension.Columns;
        // 读取数据并显示在控制台上        // 这个因为有行头,从第二行开始        for (int row = 2; row <= rowCount; row++)        {            ListViewItem item = new ListViewItem();            item.Text= worksheet.Cells[row, 1].Value.ToString();            for (int col = 2; col <= columnCount; col++)            {                var cellValue = worksheet.Cells[row, col].Value;                item.SubItems.Add(cellValue==null?"": cellValue.ToString());            }            lsvMain.Items.Add(item);        }    }
    for (int i = 0; i < lsvMain.Columns.Count; i++)    {        lsvMain.Columns[i].Width = -2;//宽度按内容计算    }  }

注:行与列的有效判断是个问题,再有就是行列都是从1开始,不像C#中其它基本是0开始索引。

图片

导出Excel

先修改一下导入,需要将数据保存到List中

在导入时,增加​​​​​​​

areas.Add(new Area{    id = int.Parse(item.Text),    type = int.Parse(item.SubItems[1].Text),    parent_id = int.Parse(item.SubItems[2].Text),    name = item.SubItems[3].Text});public class Area{    public int id { get; set; }    public int type { get; set; }    public int parent_id { get; set; }    public string name { get; set; }}private void btnExport_Click(object sender, EventArgs e){    //找出所有省    var provinces = areas.Where(x => x.type == 2);    var citys = from t in provinces                from c in areas                where c.type == 3 && c.parent_id == t.id                select new                {                    province = t.name,                    city = c.name                } into b                group b by new { province = b.province } into g                select new                {                    province = g.Key.province,                    qty = g.Count()                };
    // 使用模板    string templatePath = "./统计城市.xlsx";
    // 找开模板文件    FileInfo templateFile = new FileInfo(templatePath);
    //另存的文件    string strDesFileName = "./" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";    FileInfo desFile = new FileInfo(strDesFileName);
    // 载入到package    using (ExcelPackage package = new ExcelPackage(desFile,templateFile))    {        //找到sheet        ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"];        int row = 2;        foreach (var item in citys.ToList())        {            worksheet.Cells[row, 1].Value = item.province;            worksheet.Cells[row, 2].Value = item.qty;            row++;        }        package.Save();    }}​​​​​​​

图片

注意,导出有几个技巧,一般我们都是有导出模板,而且有可以有一些公式在Excel中,可用worksheet.Calculate(),激活公式。

这篇关于C# Excel操作类EPPlus的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1044917

相关文章

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Python实现pdf电子发票信息提取到excel表格

《Python实现pdf电子发票信息提取到excel表格》这篇文章主要为大家详细介绍了如何使用Python实现pdf电子发票信息提取并保存到excel表格,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录应用场景详细代码步骤总结优化应用场景电子发票信息提取系统主要应用于以下场景:企业财务部门:需

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

MySQL表空间结构详解表空间到段页操作

《MySQL表空间结构详解表空间到段页操作》在MySQL架构和存储引擎专题中介绍了使用不同存储引擎创建表时生成的表空间数据文件,在本章节主要介绍使用InnoDB存储引擎创建表时生成的表空间数据文件,对... 目录️‍一、什么是表空间结构1.1 表空间与表空间文件的关系是什么?️‍二、用户数据在表空间中是怎么

C#使用MQTTnet实现服务端与客户端的通讯的示例

《C#使用MQTTnet实现服务端与客户端的通讯的示例》本文主要介绍了C#使用MQTTnet实现服务端与客户端的通讯的示例,包括协议特性、连接管理、QoS机制和安全策略,具有一定的参考价值,感兴趣的可... 目录一、MQTT 协议简介二、MQTT 协议核心特性三、MQTTNET 库的核心功能四、服务端(BR

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将