Loading

EPPlus 设置字体颜色、单元格批注(comment)、常用样式设置

本文是笔记形式,未做排版

一.介绍

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("错误原因:\r\n", "作者");
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;
			}
		}
	}
}

posted @ 2020-05-28 00:31  晓晨Master  阅读(5446)  评论(0编辑  收藏  举报