本文是笔记形式,未做排版
一.介绍
EPPlus 是一款 .NET 平台下操作 Excel 的组件,无需依赖 COM 十分方便,类似于 NPOI, 但它只支持操作 Excel,API 比较全而且使用简单。
EPPlus 5.x 及以上已经转换为商业版,需要购买授权,所以我们一般可以安装 4.x 的最新版来使用。
Install-Package EPPlus -Version 4.5.3.3
官方 Wiki https://github.com/JanKallman/EPPlus/wiki 。若遇到使用问题,推荐使用 Google 搜索(搜索关键字使用英文),一般都能找到答案。
二.正片
1.设置字体颜色
var p = new ExcelPackage(new FileInfo("tmp.xlsx"), new FileInfo(options.TemplateFilePath));
//获取 Worksheet
var ws = p.Workbook.Worksheets[0];
//获取单元格
var cell = ws.Cells[rowIndex, columnIndex];
//为单元格设置字体
cell.Style.Font.Color.SetColor(Color.Crimson);
主要是这句 cell.Style.Font.Color.SetColor(Color.Crimson);
,不是直接为 Color 属性赋值,而是使用 SetColor()
方法
2.设置单元格批注
单元格批注,在我们操作 Excel 比较实用的场景:为单元格值做出错误说明,让用户知道这个单元格的值为什么错了,等等。
批注的形势如下:
代码实现:
var p = new ExcelPackage(new FileInfo("tmp.xlsx"), new FileInfo(options.TemplateFilePath));
//获取 Worksheet
var ws = p.Workbook.Worksheets[0];
//获取单元格
var cell = ws.Cells[rowIndex, columnIndex];
var comment = cell.AddComment("错误原因:
", "作者");
comment.Font.Bold = true;
var rt = comment.RichText.Add("内容");
rt.Bold = false;
comment.AutoFit = true;
注意 AddComment()
方法的第二个参数不能设置为null或空字符串,不然会报异常。
3.常用样式设置
var p = new ExcelPackage(new FileInfo("tmp.xlsx"), new FileInfo(options.TemplateFilePath));
//获取 Worksheet
var ws = p.Workbook.Worksheets[0];
//获取单元格
var cell = ws.Cells[rowIndex, columnIndex];
//设置水平对齐
cell.Style.HorizontalAlignment= ExcelHorizontalAlignment.Center;
//设置垂直对齐
cell.Style.VerticalAlignment= ExcelVerticalAlignment.Center;
//设置列宽度
ws.Column(columnIndex).Width = 50;
//设置行高度
ws.Row(rowIndex).Height= 50;
3.Copy 单元格样式
Copy 单元格样式可以用在模板导出,用于设置数据行的样式。
可以在模板设置一行空白行,设置好样式,对齐、加粗等,然后用代码从这行把样式Copy到其他数据行。
Copy 样式的核心是设置行高度和单元格 StyleId ,我封装了两个方法,可以直接使用。
public class ExcelHelper
{
/// <summary>
/// 复制Excel样式
/// </summary>
/// <param name="ws">WorkSheet</param>
/// <param name="copyStyleRowIndex">提供样式的行索引(1开始)</param>
/// <param name="startRowIndex">开始设置样式的行索引(1开始)</param>
/// <param name="rowCount">需要设置样式的行数</param>
public static void CopyStyle(ExcelWorksheet ws, int copyStyleRowIndex, int startRowIndex, int rowCount)
{
var columnCount = ws.Dimension.Columns;
for (var i = startRowIndex; i < startRowIndex + rowCount; i++)
{
ws.Row(i).Height = ws.Row(copyStyleRowIndex).Height;
for (int j = 1; j <= columnCount; j++)
{
ws.Cells[i, j].StyleID = ws.Cells[copyStyleRowIndex, j].StyleID;
}
}
}
/// <summary>
/// 复制Excel样式
/// </summary>
/// <param name="ws">WorkSheet</param>
/// <param name="copyStyleRowIndex">提供样式的行索引(1开始)</param>
/// <param name="startRowIndex">设置样式的行开始索引(1开始)</param>
/// <param name="rowCount">需要设置样式的行数</param>
/// <param name="startColIndex">需要设置样式的列开始索引(1开始)</param>
/// <param name="colCount">需要设置样式的列数量</param>
public static void CopyStyle(ExcelWorksheet ws, int copyStyleRowIndex, int startRowIndex, int rowCount,int startColIndex,int colCount)
{
for (var i = startRowIndex; i < startRowIndex + rowCount; i++)
{
ws.Row(i).Height = ws.Row(copyStyleRowIndex).Height;
for (int j = 1; j <= colCount; j++)
{
ws.Cells[i, j].StyleID = ws.Cells[copyStyleRowIndex, j].StyleID;
}
}
}
}