版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/alanzyy/article/details/50596621
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有多少行和列,方便使用公式时定位单元格。
建议对公式相关代码进行注释,有助于其他程序员理解。
3. 代码示例
下面的链接是VS2015的Solution:
WPF Demo: http://pan.baidu.com/s/1skrCdtV
MVC Demo: http://pan.baidu.com/s/1i3MK8tf
运行效果如图:
点击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/
————————————————
版权声明:本文为CSDN博主「alanzyy」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/alanzyy/article/details/50596621