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;
			}
		}
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM