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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Spark Streaming】Spark Streaming的使用

    【Spark Streaming】Spark Streaming的使用一、SparkStreaming引入集群监控一般的大型集群和平台,都需要对其进行监控的需求。要针对各种数据库,包括MySQL,HBase等进行监控要针对应用进行监控,例如Tomcat,Nginx,Node.js等要针对硬件的一些指标进行监控,例如CPU,内存,磁盘等SparkStreaming介绍官网:http://spark.apac…

    2022年6月29日
    25
  • java执行cmd ping命令是什么_急求;java调用window的cmd的ping指令。。。。[通俗易懂]

    java执行cmd ping命令是什么_急求;java调用window的cmd的ping指令。。。。[通俗易懂]展开全部//连同解决乱码问题。publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{//执行62616964757a686964616fe78988e69d8331333433623234ping命令StringcmdPing=”pingwww.baidu.com”;Runtime…

    2025年11月29日
    7
  • moxa串口服务器5430说明书(moxa多串口卡驱动安装)

    简介*多可让4个RS232串口设备立即联网NPort5400系列的基本功能是把您现有的串口设备联让您可以轻松方便的将串口设备连接到以太网络。不但保证您现有的硬件资源,更保证您未来的网络扩充的可能性。另外,NPort5400系列可以轻松的在串口和以太网络之间进行双向的资料传输,让您可以同时达到集中管理串口设备,和在网络中分散管理主机的目的。简单易用的串口设备联网服务器内建人性化的LCM显示屏,可…

    2022年4月13日
    558
  • QueryInterface IID_IDispatch

    QueryInterface IID_IDispatchSTDMETHODIMPCMathFactory::QueryInterface(REFIIDriid,void**ppv){ *ppv=NULL; if(riid==IID_IUnknown||riid==IID_IClassFactory)//这儿不改变也可以! //if(riid==IID_IUnknown||riid==IID_IClassFactory||riid=

    2022年7月21日
    14
  • 逻辑回归(Logistic Regression)详解

    逻辑回归(Logistic Regression)详解逻辑回归也称作logistic回归分析,是一种广义的线性回归分析模型,属于机器学习中的监督学习。其推导过程与计算方式类似于回归的过程,但实际上主要是用来解决二分类问题(也可以解决多分类问题)。通过给定的n组数据(训练集)来训练模型,并在训练结束后对给定的一组或多组数据(测试集)进行分类。其中每一组数据都是由p个指标构成。(1)逻辑回归所处理的数据逻辑回归是用来进行分类的。例如,我们给出一个人的[身高,体重]这两个指标,然后判断这个人是属于”胖“还是”瘦“这一类。对于这个问题,我们可以先测量n个

    2025年7月29日
    10
  • redis主从复制和集群的区别_redis主从复制和redis集群的区别

    redis主从复制和集群的区别_redis主从复制和redis集群的区别Redis主从复制和集群配置    redis主从复制概述1、redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。2、

    2022年8月13日
    7

发表回复

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

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