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

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速