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 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处