1. EPPlus概述

EPPlus 是使用Open Office XML格式(xlsx)读写Excel 2007 / 2010文件的.net开发库。

官网:http://epplus.codeplex.com/

EPPlus 支持:

  • 单元格范围
  • 单元格样式(边框,颜色,填充,字体,数字,对齐)
  • 图表
  • 图片
  • 形状
  • 批注
  • 表格
  • 保护
  • 加密
  • 数据透视表
  • 数据验证
  • 条件格式
  • VBA
  • 公式计算
  • 更多......

2. EPPlus核心类介绍

2.1  ExcelPackage类

ExcelPackage是EPPlus的入口类,解析一个Excel文件,生成ExcelWorkbook对象来表示一个Excel。该类实现了IDisposable接口,也就是说可以使用using进行对象释放。

10个构造函数,下面是常用的3个:

public ExcelPackage();public ExcelPackage(FileInfo newFile);public ExcelPackage(Stream newStream);

不管构造函数中传入的参数是否有效,该类的Workbook属性都会自动创建,无须担心空指针问题。

2.2 ExcelWorkbook类

ExcelWorkbook类表示了一个Excel文件,其Worksheets属性对应着Excel的各个Sheet。Worksheets属性会自动创建,不用担心空指针异常,但是其Count可能为0。

ExcelWorkbook的Properties属性可以对Office的一些属性进行设置,例如:

public string Author { get; set; }
public string Title { get; set; }
public string Comments { get; set; }

注意:在获取具体的Sheet时,索引号从1开始,例如:

ExcelWorksheet sheet = package.Workbook.Worksheets[1];

2.3 ExcelWorksheet类

一些常用属性:

sheet.DefaultColWidth = 10; //默认列宽
sheet.DefaultRowHeight = 30; //默认行高
sheet.TabColor = Color.Blue; //Sheet Tab的颜色
sheet.Cells.Style.WrapText = true; //单元格文字自动换行

对行列的增删操作:

public void InsertRow(int rowFrom, int rows);public void InsertColumn(int columnFrom, int columns);public void DeleteRow(int rowFrom, int rows);public void DeleteColumn(int columnFrom, int columns);

设置指定行或列的样式(宽、高、隐藏、自动换行、数字格式、锁定等):

sheet.Column(1).Width = 10;
sheet.Row(1).Height = 30;sheet.Column(1).Hidden = true;
sheet.Row(1).Hidden = true;sheet.Column(1).Style.WrapText = true;sheet.Column(1).Style.Numberformat.Format = "$#,###.00";sheet.Row(1).Style.Locked = true;

自适应宽度设置:

public void AutoFit();
public void AutoFit(double MinimumWidth);
public void AutoFit(double MinimumWidth, double MaximumWidth);
//未传入MinimumWidth时,使用Sheet的DefaultColWidth作为最小值,此时若没有提前对DefaultColWidth进行设置就会报错
//此方法时对自动换行和合并的单元格无效

2.4 ExcelRange类

3个获取单元格范围的方法:

public ExcelRange this[string Address] { get; }
//Address是指"A1:C5"这种格式public ExcelRange this[int Row, int Col] { get; }public ExcelRange this[int FromRow, int FromCol, int ToRow, int ToCol] { get; }

重要属性:

public object Value { get; set; }
//获取或设置单元格的值

复制单元格:

public void Copy(ExcelRangeBase Destination);

从二维数据集合中装载数据:

public ExcelRangeBase LoadFromCollection<T>(IEnumerable<T> Collection);public ExcelRangeBase LoadFromDataReader(IDataReader Reader, bool PrintHeaders);public ExcelRangeBase LoadFromText(FileInfo TextFile);
//这里的文件是指CSV文件//数据装载时,会与ExcelRange的行列进行对应,将值设置到其中,这些单元格没有样式和数字格式

2.5 样式

样式包括字体、颜色、对齐、边框等。

range.Style.Fill.PatternType = ExcelFillStyle.Solid;
range.Style.Fill.BackgroundColor.SetColor(Color.Gray);
//在设置Style.Fill的其他属性之前,必须设置PatternType
//设置了Style.Fill.PatternType之后,必须设置Style.Fill.BackgroundColor,否则单元格背景为黑色
//注意Style.Fill.BackgroundColor是个只读属性,需要通过SetColor()方法设置颜色
range.Font.Color.SetColor(Color.Red);
range.HorizontalAlignment = ExcelHorizontalAlignment.CenterContinuous;

2.6  数字格式

range.Style.Numberformat.Format = "$#,###.00";

使用数字格式时,一定要自行检查格式的正确性,因为产生的过程中EPPlus不会检查其正确性,如果格式有错,在打开产生的Excel文件时会提示文件格式不正确。

2.7 公式

sheet.Cells[1, 3].range.Formula = "AVERAGE(A1, B1)";
sheet.Cells[1, 3].FormulaR1C1 = "AVERAGE(RC[-2], RC[-1])";
//以上两个公式表达意思相同——对于第一行,C列的值等于A列和B列的平均值

使用公式和使用数字格式有同样的注意事项,需要自行检查正确性。

建议总是记录当前Sheet有多少行和列,方便使用公式时定位单元格。

建议对公式相关代码进行注释,有助于其他程序员理解。

        /// <summary>/// 导入/// </summary>/// <param name="stream"></param>/// <returns></returns>public static ICollection<Student> Import(Stream stream){ICollection<Student> students = new List<Student>();#region read excelusing (stream){ExcelPackage package = new ExcelPackage(stream);ExcelWorksheet sheet = package.Workbook.Worksheets[1];#region check excel formatif (sheet == null){return students;}if (!sheet.Cells[1, 1].Value.Equals("Name") ||!sheet.Cells[1, 2].Value.Equals("Age") ||!sheet.Cells[1, 3].Value.Equals("Gender") ||!sheet.Cells[1, 4].Value.Equals("English Score") ||!sheet.Cells[1, 5].Value.Equals("Math Score")){return students;}#endregion#region get last row indexint lastRow = sheet.Dimension.End.Row;while (sheet.Cells[lastRow, 1].Value == null){lastRow--;}#endregion#region read datasfor (int i = 2; i <= lastRow; i++){students.Add(new Student{Name = sheet.Cells[i, 1].Value.ToString(),Age = int.Parse(sheet.Cells[i, 2].Value.ToString()),Gender = (Gender)Enum.Parse(typeof(Gender), sheet.Cells[i, 3].Value.ToString()),EnglishScore = int.Parse(sheet.Cells[i, 4].Value.ToString()),MathScore = int.Parse(sheet.Cells[i, 5].Value.ToString())});}             }
        /// <summary>/// 导出/// </summary>/// <param name="students"></param>/// <returns></returns>public static MemoryStream Export(ICollection<Student> students){MemoryStream stream = new MemoryStream();ExcelPackage package = new ExcelPackage(stream);package.Workbook.Worksheets.Add("Students");ExcelWorksheet sheet = package.Workbook.Worksheets[1];#region write headersheet.Cells[1, 1].Value = "Name";sheet.Cells[1, 2].Value = "Age";sheet.Cells[1, 3].Value = "Gender";sheet.Cells[1, 4].Value = "English Score";sheet.Cells[1, 5].Value = "Math Score";sheet.Cells[1, 6].Value = "Average Score";using (ExcelRange range = sheet.Cells[1, 1, 1, 6]){range.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;range.Style.Fill.BackgroundColor.SetColor(Color.Gray);range.Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thick;range.Style.Border.Bottom.Color.SetColor(Color.Black);range.AutoFitColumns(4);}#endregion#region write contentint pos = 2;foreach (Student s in students){sheet.Cells[pos, 1].Value = s.Name;sheet.Cells[pos, 2].Value = s.Age;sheet.Cells[pos, 3].Value = s.Gender;sheet.Cells[pos, 4].Value = s.EnglishScore;sheet.Cells[pos, 5].Value = s.MathScore;sheet.Cells[pos, 6].FormulaR1C1 = "AVERAGE(RC[-1], RC[-2])";if (s.MathScore > 90 && s.EnglishScore > 90){using (ExcelRange range = sheet.Cells[pos, 1, pos, 6]){range.Style.Font.Color.SetColor(Color.Blue);}}else if (s.MathScore < 80 && s.EnglishScore < 80){using (ExcelRange range = sheet.Cells[pos, 1, pos, 6]){range.Style.Font.Color.SetColor(Color.Red);}}using (ExcelRange range = sheet.Cells[pos, 1, pos, 6]){range.Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;range.Style.Border.Bottom.Color.SetColor(Color.Black);range.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Left;}pos++;}

C#中 EPPlus对Excel的读写相关推荐

  1. pythonexcel操作总结_python中常见关于Excel表格读写操作

    最近在写项目,刚好要运用到excel表格的一些读写,顺便总结一下我以前学过的几个关于表格的操作.在写项目中,经常会见到页面中数据导出到表格中,同时,也会有经常在表格中填写测试用例,然后获取数据来做自动 ...

  2. python第三方库文件传输_Python第三方库在Excel文件读写中的应用

    Python第三方库在Excel文件读写中的应用 文/刘卫华1 史婷婷2 许学添1 [摘 要]摘 要 [期刊名称]<电子技术与软件工程> [年(卷),期]2019(000)016 [总页数 ...

  3. java中 Excel文件解析及超大Excel文件读写

    本文主要对Excel中数据的解析和生成进行总结 前言 在应用程序的开发过程中,我们经常要用到Excel进行数据的导入或导出.所以,在通过Java语言实现此类需求时,通常会对Excel文件进行解析或生成 ...

  4. qt linux excel文件读取显示,qt中写入excle?QT怎样读写excel-CSDN论坛

    如何通过Qt 创建一个excel文件 首先,我们打开前文所的工目. 然后,我们在界面设计,加入一个label用于显示,要保存的目录.注意设置下相应的界面布局. 然后,我们在mainwindow.h类中 ...

  5. .NET Core(C#) EPPlus创建Excel(.xlsx)写入数据的方法及示例代码

    EPPlus是一个使用Open Office XML(Xlsx)文件格式,能读写Excel(.xlsx)文件的开源组件.本文主要介绍.NET Core(C#)中使用EPPlus创建Excel(.xls ...

  6. python写表格_使用Python对Excel进行读写操作

    学习Python的过程中,我们会遇到Excel的读写问题.这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据.下面我们介绍如何实现使用Python对Exc ...

  7. excel调用python编程-使用Python对Excel进行读写操作

    学习Python的过程中,我们会遇到Excel的读写问题.这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据.下面我们介绍如何实现使用Python对Exc ...

  8. python填写excel-Python玩转Excel的读写改实例

    摘要: 利用xlrd读取excel 利用xlwt写excel 利用xlutils修改excel 利用xlrd读取excel 先需要在命令行中pip install xlrd:读取xls文件的流程为: ...

  9. 【Python】xlwt基础:excel存取读写

    1 openpyxl from openpyxl import load_workbook #excel文件读写模块'''excel文件读写模块'''def get_excel(self,indata ...

最新文章

  1. springboot +element-axios跨域请求
  2. php排序数组排序_PHP 数组排序
  3. 分区字段必须包含在主键字段_24 个必须掌握的数据库面试问题!
  4. Kubernetes Controller Manager 工作原理
  5. CF623E Transforming Sequence
  6. 集群、分布式、负载均衡区别与联系
  7. 美国体验圣帕特里克节(St.Patrick's Day)
  8. DDMMSS.SS转为DD
  9. 专访余承东:华为引领行业进步 折叠屏手机即将上市
  10. Elasticsearch--进阶-match全文检索---全文检索引擎ElasticSearch工作笔记011
  11. Ubuntu——系统扩容(加硬盘)的学习笔记
  12. ie下解决PNG图片不透明问题
  13. 【智能算法第一期】Elman神经网络基本原理
  14. 使用js获取移动端设备屏幕高度和宽度尺寸的方法
  15. 顶部标题栏的布局设计
  16. 湖北武汉劳务员考试建筑施工企业的劳务实名制建筑七大员考试
  17. 信号时域频域特征公式
  18. 迭代器Iterator列表迭代器ListIterator
  19. 大学英语综合教程一 Unit 6 课文内容英译中 中英翻译
  20. 小米空气净化器滤芯RFID解密

热门文章

  1. 经历大风大浪后,你突然看透了生活中哪些事情呢?
  2. 电磁轨道炮设计-基于模型的系统工程(20190819更新)
  3. audio 读取服务器文件夹,从互联网/服务器(并传递到nAudio声音播放器)流声音...
  4. Android汽车服务篇(一) CarService
  5. 洛谷 P1169 [ZJOI2007]棋盘制作
  6. 输入生日测试你的前世今生
  7. 奔步前端面试(实习)
  8. zz:用MSBuild.... DailyBuild和软件开发流程的东东
  9. 「智能服务中心+集团服务中台」:让每个企业享受智慧服务带来的改变 |百万人学AI评选
  10. 非法破解?击键声也会出卖你?嘘,小心隔墙有耳……