EPPlus 使用小结

EPPlus 使用小结文章目录简介导入导出简单导出样式格式化其他总结简介EPPlus是一个使用OpenOfficeXML(xlsx)文件格式,能读写Excel2007/2010文件的开源组件,在导出Excel的时候不需要电脑上安装office,它的一个缺点就是不支持导出2003版的Excel(xls)。导入这部分相对简单,直接看下代码:using(ExcelPackagepackage=newExcelPackage(existingFile)){ExcelWorksheetworksh

大家好,又见面了,我是你们的朋友全栈君。

简介

EPPlus是一个使用Open Office XML(xlsx)文件格式,能读写Excel 2007/2010 文件的开源组件,在导出Excel的时候不需要电脑上安装office,它的一个缺点就是不支持导出2003版的Excel(xls)。

.net core 通过nuget 包管理器添加
在这里插入图片描述

导入

这部分相对简单,直接看下代码:

using (ExcelPackage package = new ExcelPackage(existingFile))
{
    ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
    
    //获取表格的列数和行数
    int rowCount = worksheet.Dimension.Rows;
    int colCount = worksheet.Dimension.Columns;
    for (int row = 1; row <= rowCount; row++)
    {
        // 具体的获取数据
        // worksheet.Cells[row, 1].Value.ToString();
    }
}

根据具体的业务情况,将excel中的数据导入到数据库中即可。

导出

简单导出

直接看代码:

// excelPath 为excel文件路径,如果没有,需要使用 FileStream 来创建,而不是使用 FileInfo
FileInfo existingFile = new FileInfo(excelPath);

using (ExcelPackage package = new ExcelPackage(existingFile))
{
    // sheetName 为 sheet 名称
    ExcelWorksheet worksheetIn = package.Workbook.Worksheets.Add(sheetName);
    // 第二参数为true 则会把 lstData定义的属性名称作为excel标题
    worksheetIn.Cells.LoadFromCollection(lstData, false);
    
    package.Save(); //Save the workbook.
}

样式格式化

还是直接看到代码:

Func<ExcelWorksheet, Color, bool> SetHeadStyle = (targetSheet, backgroundColor) =>
{
    var col = targetSheet.Dimension.Columns;
    // cells参数:第一个是开始行索引,第二个是开始列索引
    // 第三个是结束行索引,第四个是结束列的索引,注意:结束索引不能比开始索引小
    using (ExcelRange rng = targetSheet.Cells[1, 1, 1, col - 1])
    {
        // 对字体的设置
        rng.Style.Font.Bold = true;
        rng.Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;
        rng.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
        rng.Style.Font.Size = 8;
        rng.Style.Font.Color.SetColor(Color.FromArgb(0, 0, 128));
        
        // 单元格背景色的设置
        rng.Style.Fill.PatternType = ExcelFillStyle.Solid;
        rng.Style.Fill.BackgroundColor.SetColor(backgroundColor);

        //单独设置单元格底部边框样式和颜色(上下左右均可分开设置)
        rng.Style.Border.BorderAround(ExcelBorderStyle.Thin);

        rng.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
        rng.Style.Border.Right.Style = ExcelBorderStyle.Thin;

        // 自当使用文字大小
        rng.AutoFitColumns();
    }

    //单独设置单元格底部边框样式和颜色(上下左右均可分开设置)
    targetSheet.Cells[1, 3].Style.Border.Right.Style = ExcelBorderStyle.Thick;
    return true;
};
// 表示第一,二行,第一列就进行单元格合并
worksheetIn.Cells[1, 1, 2, 1].Merge = true;

使用方式:

SetHeadStyle(worksheetIn, Color.FromArgb(146, 208, 80));

也可参考此文https://www.jianshu.com/p/b7f588ccf26b

其他

EPPlus对现有excel的操作好像不是很好,即如果你对已经存在的sheet进行操作,然后保存的时候是报错的,但是添加和删除sheet都是没问题的。所以如果要对现有的sheet做操作可以先删除在添加即可。如下

var hasSheet = package.Workbook.Worksheets[sheetName];
if (hasSheet != null)
{
    package.Workbook.Worksheets.Delete(sheetName);
}
ExcelWorksheet worksheetIn = package.Workbook.Worksheets.Add(sheetName);

如果有对sheet位置有要求的,EPPlus默认添加sheet都是 Add 或者 Append 方法,没有插入到指定的位置的方法。但是经过查看源码,其提供了移动到指定为的方法,代码如下:

package.Workbook.Worksheets.MoveAfter(package.Workbook.Worksheets.Count - 1, 1); // 索引默认从1开始

源码定义如下:

 //
 // 摘要:
 //     Moves the source worksheet to the position after the target worksheet
 //
 // 参数:
 //   sourceName:
 //     The name of the source worksheet
 //
 //   targetName:
 //     The name of the target worksheet
 public void MoveAfter(string sourceName, string targetName);
 //
 // 摘要:
 //     Moves the source worksheet to the position after the target worksheet
 //
 // 参数:
 //   sourcePositionId:
 //     The id of the source worksheet
 //
 //   targetPositionId:
 //     The id of the target worksheet
 public void MoveAfter(int sourcePositionId, int targetPositionId);
 //
 // 摘要:
 //     Moves the source worksheet to the position before the target worksheet
 //
 // 参数:
 //   sourcePositionId:
 //     The id of the source worksheet
 //
 //   targetPositionId:
 //     The id of the target worksheet
 public void MoveBefore(int sourcePositionId, int targetPositionId);
 //
 // 摘要:
 //     Moves the source worksheet to the position before the target worksheet
 //
 // 参数:
 //   sourceName:
 //     The name of the source worksheet
 //
 //   targetName:
 //     The name of the target worksheet
 public void MoveBefore(string sourceName, string targetName);
 //
 // 摘要:
 //     Moves the source worksheet to the end of the worksheets collection
 //
 // 参数:
 //   sourceName:
 //     The name of the source worksheet
 public void MoveToEnd(string sourceName);
 //
 // 摘要:
 //     Moves the source worksheet to the end of the worksheets collection
 //
 // 参数:
 //   sourcePositionId:
 //     The position of the source worksheet
 public void MoveToEnd(int sourcePositionId);
 //
 // 摘要:
 //     Moves the source worksheet to the start of the worksheets collection
 //
 // 参数:
 //   sourceName:
 //     The name of the source worksheet
 public void MoveToStart(string sourceName);
 //
 // 摘要:
 //     Moves the source worksheet to the start of the worksheets collection
 //
 // 参数:
 //   sourcePositionId:
 //     The position of the source worksheet
 public void MoveToStart(int sourcePositionId);

总结

总体上来说,EPPlus操作相对还是毕竟简单的,而且从导出数据量上来看,也是很有优势的。有兴趣的可自行度娘了解其优劣情况。而如果想在.net core项目里面完成excel 的导入导出,也可考虑使用Magicodes.IE。这个是一个开源的项目,完全不用担心商用的问题,而且其内部实现也使用了EPPlus来实现的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148431.html原文链接:https://javaforall.net

(2)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现[通俗易懂]

    口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现[通俗易懂]本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录。如哪里有侵权请联系笔者进行删除。另外在这里对比赛举办方表示感谢~~其中开源代码会在整理后放在github上,并给出相应的链接,这里先留一个小尾巴~~相关有用的链接如下:口罩、安全帽识别比赛踩坑记(一)经验漫谈及随想比赛官方开发环境指导Dockerfile官方文档OpenVINO官方文档…

    2022年5月12日
    75
  • docker nginx挂载目录_挂载成功之后如何安装

    docker nginx挂载目录_挂载成功之后如何安装创建目录一般将nginx目录挂载到宿主机方便操作,创建nginx目录:mkdir/home/dockernginxmkdir/home/dockernginx/{conf,html,logs}创建nginx配置文件如下:vim/home/dockernginx/conf/nginx.confnginx默认配置如下:usernginx;worker_processesauto;error_log/var/log/nginx/error.lognotice;pi

    2022年8月20日
    9
  • React之常用技术栈

    React之常用技术栈

    2020年11月19日
    177
  • datagrip-2022.01.4 激活码[最新免费获取]

    (datagrip-2022.01.4 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~747EFQ8BIF-eyJsaWNlbnNlSWQiOi…

    2022年3月31日
    853
  • 唯一约束和唯一索引区别是什么_db2违反唯一索引的约束

    唯一约束和唯一索引区别是什么_db2违反唯一索引的约束1.主键约束(PRIMARY KEY)1)主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。2)是不可能(或很难)更新.3)主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).4)主健可作外健,唯一索引不可;2.唯一性约束(UNIQUE)1)唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段

    2025年12月10日
    3
  • 二分查找的Java实现「建议收藏」

    目录写在前面二分查找的原理代码实现学习感想写在前面二分查找是一个很有趣的算法,可以很大程度的提升性能,比如待查询的数组或其他集合很大的时候,二分查找的威力就可以体现出来。但是平时的工作中我们基本上不会去写二分查找,所以我觉得有必要写一篇博文来记录二分查找的学习。二分查找的原理所谓二分查找,其实就是获取一组有序数据的中间数据,判断其跟查询关键字的…

    2022年4月14日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号