在日常开发中,Excel 报表导出、数据模板生成等场景常需要通过字体样式区分标题、表头、数据行与重点内容。不同的字体、字号、颜色和字形能够显著提升表格的可读性。本文将基于 Spire.XLS for .NET 库,介绍如何通过 C# 代码为 Excel 单元格灵活应用多种字体效果。
一、开发环境准备
在开始编写代码前,需要先在项目中引入对应的类库。可以通过 NuGet 包管理器搜索并安装 Spire.XLS,或在程序包管理器控制台执行命令:
Install-Package Spire.XLS
该库支持.NET Framework、.NET 5+等多种平台,安装完成后即可直接引用命名空间进行开发。
二、核心字体属性说明
在 Excel 操作中,字体样式主要包含以下可配置项,对应库中 ExcelFont 对象的属性:
- 字体名称 :
FontName,支持宋体、微软雅黑、Arial等系统已安装字体 - 字号大小 :
Size,单位为磅 - 字体颜色 :
Color,支持 RGB 颜色设置 - 字形效果 :
IsBold(加粗)、IsItalic(斜体)、Underline(下划线) - 特殊效果 :
IsStrikethrough(删除线)、IsSuperscript(上标)、IsSubscript(下标)
三、常见字体应用场景实现
3.1 单个单元格基础字体设置
这是最基础的用法,适用于设置表格标题、单个重点单元格等场景。通过CellRange.Style.Font属性即可配置字体样式。
csharp
using Spire.Xls;
class Program
{
static void Main(string[] args)
{
// 创建工作簿
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
// 设置A1单元格内容
sheet.Range["A1"].Text = "销售数据统计表";
// 配置字体样式
CellStyle style = sheet.Range["A1"].Style;
style.Font.FontName = "微软雅黑";
style.Font.Size = 16;
style.Font.IsBold = true;
style.Font.Color = System.Drawing.Color.DarkBlue;
// 保存文件
workbook.SaveToFile("基础字体设置.xlsx", ExcelVersion.Version2016);
}
}
3.2 为不同单元格区域设置差异化字体
实际报表中,表头、数据行、汇总行通常使用不同字体风格。可以通过指定单元格范围,批量设置区域内的字体样式。
csharp
// 设置表头区域字体(A2:D2)
CellRange headerRange = sheet.Range["A2:D2"];
headerRange.Style.Font.FontName = "微软雅黑";
headerRange.Style.Font.Size = 12;
headerRange.Style.Font.IsBold = true;
headerRange.Style.Font.Color = System.Drawing.Color.White;
// 配合背景色增强区分度
headerRange.Style.Color = System.Drawing.Color.SteelBlue;
// 设置数据区域字体(A3:D6)
CellRange dataRange = sheet.Range["A3:D6"];
dataRange.Style.Font.FontName = "Arial";
dataRange.Style.Font.Size = 11;
// 设置汇总行字体(A7:D7)
CellRange totalRange = sheet.Range["A7:D7"];
totalRange.Style.Font.FontName = "微软雅黑";
totalRange.Style.Font.Size = 12;
totalRange.Style.Font.IsBold = true;
totalRange.Style.Font.Color = System.Drawing.Color.DarkRed;
3.3 同一单元格内混合多种字体
当需要在一个单元格内突出部分文字时,例如"金额:1200元"这类组合文本,可以使用富文本(RichText)功能,为同一单元格内的不同字符段设置独立字体。
csharp
// 设置单元格文本
sheet.Range["A9"].Text = "备注:本月销售额同比增长15%,达成季度目标";
// 获取富文本对象
RichText richText = sheet.Range["A9"].RichText;
// 使用 CreateFont 创建字体对象
ExcelFont fontNormal = workbook.CreateFont();
fontNormal.FontName = "微软雅黑";
fontNormal.Size = 11;
fontNormal.IsBold = false;
fontNormal.Color = Color.Black;
ExcelFont fontRed = workbook.CreateFont();
fontRed.FontName = "微软雅黑";
fontRed.Size = 11;
fontRed.IsBold = true;
fontRed.Color = Color.Red;
ExcelFont fontItalic = workbook.CreateFont();
fontItalic.FontName = "微软雅黑";
fontItalic.Size = 11;
fontItalic.IsItalic = true;
fontItalic.Color = Color.Green;
// 先整体应用默认字体(可选,避免漏掉未覆盖部分)
richText.SetFont(0, 22, fontNormal); // 全部设为普通
// 局部覆盖
richText.SetFont(0, 3, fontNormal); // "备注:"(索引0~2)
richText.SetFont(12, 3, fontRed); // "15%"(索引12~14)
richText.SetFont(16, 6, fontItalic); // "达成季度目标"(索引16~21)
SetFont方法的两个参数分别为起始字符索引和结束字符索引,索引从0开始计数。
3.4 行与列级别的批量字体设置
对于整行或整列的统一样式,可以直接对行或列对象设置字体,无需逐个单元格遍历。
csharp
// 设置第1行整体字体
sheet.Rows[0].Style.Font.FontName = "微软雅黑";
sheet.Rows[0].Style.Font.Size = 14;
// 设置第3列整体字体
sheet.Columns[2].Style.Font.FontName = "Arial Narrow";
sheet.Columns[2].Style.Font.Size = 10;
四、完整示例代码
以下是一个包含多种字体效果的完整示例,可直接运行查看效果:
csharp
using Spire.Xls;
using System.Drawing;
namespace ExcelFontDemo
{
class Program
{
static void Main(string[] args)
{
using (Workbook workbook = new Workbook())
{
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "销售报表";
// 1. 标题
sheet.Range["A1"].Text = "2024年Q2产品销售统计表";
sheet.Range["A1:D1"].Merge();
sheet.Range["A1"].Style.Font.FontName = "微软雅黑";
sheet.Range["A1"].Style.Font.Size = 18;
sheet.Range["A1"].Style.Font.IsBold = true;
sheet.Range["A1"].Style.Font.Color = Color.DarkSlateGray;
sheet.Range["A1"].HorizontalAlignment = HorizontalAlignType.Center;
sheet.SetRowHeight(1, 25);
// 2. 表头
string[] headers = { "产品名称", "销售数量", "单价(元)", "销售额(元)" };
for (int i = 0; i < headers.Length; i++)
{
sheet.Range[2, i + 1].Text = headers[i];
}
sheet.Range["A2:D2"].Style.Font.FontName = "微软雅黑";
sheet.Range["A2:D2"].Style.Font.Size = 12;
sheet.Range["A2:D2"].Style.Font.IsBold = true;
sheet.Range["A2:D2"].Style.Font.Color = Color.White;
sheet.Range["A2:D2"].Style.Color = Color.Teal;
// 3. 数据区域(使用 InsertArray)
object[,] data = {
{ "产品A", 120, 89.9, 10788 },
{ "产品B", 256, 45.5, 11648 },
{ "产品C", 89, 199.0, 17711 }
};
sheet.InsertArray(data, 3, 1);
sheet.Range["A3:D5"].Style.Font.FontName = "Arial";
sheet.Range["A3:D5"].Style.Font.Size = 11;
// 4. 汇总行
sheet.Range["A6"].Text = "合计";
sheet.Range["D6"].Formula = "=SUM(D3:D5)";
sheet.Range["A6:D6"].Style.Font.FontName = "微软雅黑";
sheet.Range["A6:D6"].Style.Font.Size = 12;
sheet.Range["A6:D6"].Style.Font.IsBold = true;
sheet.Range["A6:D6"].Style.Font.Color = Color.DarkRed;
// 5. 备注(富文本)
string remark = "注:标红数据为超额完成项,本季度目标完成率112%";
sheet.Range["A8"].Text = remark;
RichText richText = sheet.Range["A8"].RichText;
// 用 CreateFont 创建字体
ExcelFont fontGray = workbook.CreateFont();
fontGray.FontName = "微软雅黑";
fontGray.Size = 10;
fontGray.Color = Color.Gray;
ExcelFont fontRed = workbook.CreateFont();
fontRed.FontName = "微软雅黑";
fontRed.Size = 10;
fontRed.Color = Color.Red;
fontRed.IsBold = true;
ExcelFont fontGreen = workbook.CreateFont();
fontGreen.FontName = "微软雅黑";
fontGreen.Size = 10;
fontGreen.Color = Color.Green;
fontGreen.IsBold = true;
// 先整体灰色,再局部覆盖
richText.SetFont(0, remark.Length, fontGray);
richText.SetFont(2, 3, fontRed); // "标红数"
richText.SetFont(17, 5, fontGreen); // "完成率"
// 自动列宽
sheet.AllocatedRange.AutoFitColumns();
// 保存
workbook.SaveToFile("Excel多字体示例.xlsx", ExcelVersion.Version2016);
}
}
}
}
通过以上方法,可以灵活地在 Excel 中实现各类字体样式需求,满足报表美化、数据分层展示等多种业务场景。核心思路是通过单元格范围对象获取样式属性,再对字体对象进行配置,理解这一逻辑后即可举一反三实现更多样式效果。