使用EPPlus(C#)读写Excel

使用EPPlus(C#)读写ExcelEPPlus是使用OpenOfficeXML格式(xlsx)读写Excel2007/2010文件的.net开发库。EPPlus支持:单元格范围、单元格样式(边框,颜色,填充,字体,数字,对齐)、图表、图片、形状、批注、表格、保护加密、数据透视表、数据验证、条件格式、VBA、公式计算等等。

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

1. EPPlus概述

EPPlus 是使用Open Office XML格式(xlsx)读写Excel 2007 / 2010文件的.net开发库。
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有多少行和列,方便使用公式时定位单元格。

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

3. 代码示例

下面的链接是VS2015的Solution:

WPF Demo: http://pan.baidu.com/s/1skrCdtV

MVC Demo: http://pan.baidu.com/s/1i3MK8tf

运行效果如图:

2016012701

点击Export可以把表格中显示的内容导出到Excel。

点击RefreshTable可以刷新表格的内容。

点击Import把导出的Excel再导入进来。

Demo中没有对Excel的内容做完整的验证,如果手动修改了Excel格式的话,可能会报错。

4. 参考链接

http://epplus.codeplex.com/

https://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt1

https://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt2

https://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt3

https://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt4

https://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt5

https://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt6

https://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt7

https://www.paragon-inc.com/resources/blogs-posts/easy_excel_interaction_pt8

http://www.alanzeng.cn/2016/01/use-epplus-read-write-excel/

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

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

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


相关推荐

  • cmd进入目录后怎样运行exe_命令提示符怎样进入文件所在目录

    cmd进入目录后怎样运行exe_命令提示符怎样进入文件所在目录如何用Windows命令提示符(cmd.exe)进入指定目录如何用Windows命令提示符(cmd.exe)进入指定目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录如何用Windows命令提示符(cmd.exe)进入指定目录前言一、Windows命令提示符是什么?二、使用步骤1.打开命令提示符总结新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPa

    2022年10月15日
    0
  • windebug调试方法_java怎么远程调试

    windebug调试方法_java怎么远程调试关于WCF的调试,MSDN给出如下说明,可能是由于我的水平问题,个人无法完全看懂,所以自己总结了一点WCF的调试技巧。仅供参考。如何开始调试WCF服务: 通常WCF可以部署成Windowsservice和Webservice。1.对于WebService通常后缀都是*.svc对于这类我通常有2种方式对其调试a.      新建一个控制台程序,通过AddwebR

    2025年6月20日
    0
  • forkjoin用法_java fork join

    forkjoin用法_java fork join目录前言前言ForkJoin是JDK1.7加入的多线程并行处理框架。ForkJoin使用`分而治之`的思想,把一个大任务拆分成一个个小任务,然后再聚合,得到最终结果。这有点像Hadoop中的MapReduce。还支持工作窃取。

    2022年9月20日
    1
  • python十进制转二进制循环,python十进制转二进制的详解

    python十进制转二进制循环,python十进制转二进制的详解python十进制转二进制的详解发布时间:2020-09-1611:46:35来源:脚本之家阅读:105作者:Vpython十进制转二进制python中十进制转二进制使用bin()函数。bin()返回一个整数int或者长整数longint的二进制表示。下面是使用示例:>>>bin(10)’0b1010′>>>bin(20)’0b10100’补…

    2022年10月24日
    0
  • 卸载pip包并卸载其依赖包[通俗易懂]

    卸载pip包并卸载其依赖包[通俗易懂]原创工具程序,卸载指定的pip包并递归卸载其依赖包使用方法:将以下代码保存为pip_uninst_rec.py,执行pythonpip_uninst_rec.py<pkg>即可importargparseimportosfromcollectionsimportdequeimportpip._internal.commands.showasshow_cmddefmain():parser=argparse.ArgumentParser(des

    2022年10月16日
    1
  • 支付宝功能结构图_阿里双十一晚会

    支付宝功能结构图_阿里双十一晚会转自:https://blog.csdn.net/itfly8/article/details/111027014简介:汤波(甘盘),男,1989/02/21,硕士学历。高中开始编程,热爱技术,深信技术让世界更美好。对前沿技术一直保持饥饿感,热衷于创新和革新,让系统体制更为高效和人性化,也深知一个人强走的快,一个团体强才能走的远。在技术团队建设(团队招聘和组建、梯队梯度建设)、技术栈管理(包含技术选型、技术规范建设、软件体系规划)和项目研发管理(软件工程管理、开发效能和质量管理)方面有着较为丰富的实..

    2022年10月19日
    1

发表回复

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

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