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#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方