使用C#在Excel中应用多种字体样式的代码详解

 更新时间:2026年06月22日 08:30:58   作者:咕白m625  
在日常开发中,Excel 报表导出、数据模板生成等场景常需要通过字体样式区分标题、表头、数据行与重点内容,本文将基于 Spire.XLS for .NET 库,介绍如何通过 C# 代码为 Excel 单元格灵活应用多种字体效果,需要的朋友可以参考下

在日常开发中,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属性即可配置字体样式。

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 为不同单元格区域设置差异化字体

实际报表中,表头、数据行、汇总行通常使用不同字体风格。可以通过指定单元格范围,批量设置区域内的字体样式。

// 设置表头区域字体(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)功能,为同一单元格内的不同字符段设置独立字体。

// 设置单元格文本
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 行与列级别的批量字体设置

对于整行或整列的统一样式,可以直接对行或列对象设置字体,无需逐个单元格遍历。

// 设置第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;

四、完整示例代码

以下是一个包含多种字体效果的完整示例,可直接运行查看效果:

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 中实现各类字体样式需求,满足报表美化、数据分层展示等多种业务场景。核心思路是通过单元格范围对象获取样式属性,再对字体对象进行配置,理解这一逻辑后即可举一反三实现更多样式效果。

以上就是使用C#在Excel中应用多种字体样式的代码详解的详细内容,更多关于C# Excel应用多种字体样式的资料请关注脚本之家其它相关文章!

相关文章

  • C#中的Timer和DispatcherTimer使用实例

    C#中的Timer和DispatcherTimer使用实例

    这篇文章主要介绍了C#中的Timer和DispatcherTimer使用实例,本文分别给出它们的使用代码实例,需要的朋友可以参考下
    2015-01-01
  • C#实现动态图标闪烁显示的示例代码

    C#实现动态图标闪烁显示的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现动态图标闪烁显示的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • C#命名空间与java包的区别分析

    C#命名空间与java包的区别分析

    这篇文章主要介绍了C#命名空间与java包的区别,较为详细的分析了C#命名空间与java包的相同点与不同点,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 通过C#高效提取PDF文本的完整指南

    通过C#高效提取PDF文本的完整指南

    在数字化办公场景中,PDF文本提取需求频繁出现,手动复制粘贴耗时低效,而传统代码方案常因依赖Adobe组件、处理加密文件困难等问题受阻,本文将深度解析如何通过国产Spire.PDF for .NET库实现无依赖、高精度的PDF文本提取,需要的朋友可以参考下
    2025-08-08
  • C#中跨线程访问控件问题解决方案分享

    C#中跨线程访问控件问题解决方案分享

    这篇文章主要介绍了C#中跨线程访问控件问题解决方案,有需要的朋友可以参考一下
    2013-11-11
  • C#通过热键控制显示器开关的方法

    C#通过热键控制显示器开关的方法

    这篇文章主要介绍了C#通过热键控制显示器开关的方法,涉及C#针对热键的操作技巧,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • C#读写INI配置文件的技术方案与实践指南

    C#读写INI配置文件的技术方案与实践指南

    INI(Initialization)文件作为一种经典的配置文件格式,凭借其结构简单、可读性强、易于人工编辑的特点,在 Windows 开发生态中拥有长久的生命力,下面我们就来系统阐述一下在 C# 中进行 INI 文件读写操作的核心知识吧
    2026-05-05
  • C#实现利用反射简化给类字段赋值的方法

    C#实现利用反射简化给类字段赋值的方法

    这篇文章主要介绍了C#实现利用反射简化给类字段赋值的方法,涉及C#操作反射的相关技巧,需要的朋友可以参考下
    2015-05-05
  • c#实现无标题栏窗口的拖动

    c#实现无标题栏窗口的拖动

    本篇文章是对c#中实现无标题栏窗口拖动的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • C#、ASP.NET通用扩展工具类之TypeParse

    C#、ASP.NET通用扩展工具类之TypeParse

    这篇文章主要介绍了C#、ASP.NET通用扩展工具类之TypeParse,使用了此类,类型转换方便多了,本文直接给出实现代码和使用方法,需要的朋友可以参考下
    2015-06-06

最新评论