
格式化在提升 Excel 电子表格的可读性、分析性和展示效果方面发挥着重要作用。无论您是在生成报表、发票、财务报表还是仪表板,原始数据在分享给最终用户之前,通常都需要经过适当的样式设置。
在 C# 中,Excel 格式化任务可能包括更改字体、应用颜色、对齐内容、设置数字和日期格式、添加边框、创建表格以及配置页面布局。手动执行这些任务可能非常耗时,尤其是在处理大量电子表格时。
Spire.XLS for .NET 提供了一套全面的 API,可在无需安装 Microsoft Excel 的情况下创建、编辑、格式化和转换 Excel 文档。在本文中,您将学习如何使用 Spire.XLS for .NET 在 C# 中 对 Excel 文件应用各种类型的格式设置 。
目录:
- 准备 C# 项目以进行 Excel 格式化
- 第 1 部分:设置单元格外观格式
- 第 2 部分:设置单元格值格式
- 第 3 部分:设置区域和布局格式
- 第 4 部分:应用高级格式
- 第 5 部分:设置 Excel 表格和工作表格式
- 第 6 部分:创建专业报表示例
- 结论
- 常见问题
准备 C# 项目以进行 Excel 格式化
Spire.XLS for .NET 是一个强大的 Excel 库,使开发人员能够以编程方式处理 XLS、XLSX、XLSM、CSV 以及其他电子表格格式。除格式化操作外,它还支持公式计算、图表创建、数据透视表、工作表管理、打印以及文件转换。
要安装 Spire.XLS for .NET,请运行以下 NuGet 命令:
Install-Package Spire.XLS
在应用格式之前,加载现有的 Excel 工作簿(或创建一个新工作簿),并获取要修改的工作表。完成所有格式化操作后,使用 SaveToFile() 方法将结果保存为新的 Excel 文件。
using Spire.Xls;
using System.Drawing;
// Create a workbook object
Workbook workbook = new Workbook();
// Load an existing Excel file
workbook.LoadFromFile("input.xlsx");
// Get a specific worksheet
Worksheet sheet = workbook.Worksheets[0];
// Apply formatting
...
// Save the result
workbook.SaveToFile("output.xlsx", ExcelVersion.Version2016);
注意: 以下示例假设工作簿已经加载,并且已获取工作表对象。
第 1 部分:设置单元格外观格式
单元格外观设置决定了数据在工作表中的显示方式。适当的格式设置可以显著提高可读性,并帮助用户快速识别重要信息。
设置单元格字体格式
字体格式允许您自定义单元格内容的视觉样式。常见选项包括字体名称、字体大小、加粗、斜体、下划线和字体颜色。这些设置通常用于报表标题、章节标题和重点数据。
CellStyle style = workbook.Styles.Add("FontStyle");
style.Font.FontName = "Calibri";
style.Font.Size = 14;
style.Font.IsBold = true;
style.Font.IsItalic = true;
style.Font.Underline = FontUnderlineType.Single;
style.Font.Color = Color.Blue;
sheet.Range["A1"].Text = "Formatted Text";
sheet.Range["A1"].Style = style;
设置单元格背景颜色
背景颜色有助于区分工作表中的不同区域,并突出显示关键单元格。例如,您可以为标题行设置颜色,或者使用对比色填充汇总数据。
sheet.Range["A2"].Text = "Background Color";
sheet.Range["A2"].Style.Color = Color.LightSkyBlue;
对齐单元格内容
Excel 提供水平对齐、垂直对齐、缩进和文本旋转等选项。合理的对齐方式能够改善工作表整体布局,使表格数据更易于浏览。
sheet.Range["B2"].Text = "Centered Text";
CellStyle style = sheet.Range["B2"].Style;
style.HorizontalAlignment = HorizontalAlignType.Center;
style.VerticalAlignment = VerticalAlignType.Center;
style.Rotation = 45;
sheet.SetRowHeight(2, 40);
sheet.SetColumnWidth(2, 20);
添加单元格边框
边框有助于分隔行和列,并定义表格结构。根据不同场景,您可以为单个单元格或整个区域添加边框,并自定义其样式和颜色。
CellRange range = sheet.Range["A4:D6"];
range.Text = "Border";
range.Style.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
range.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
range.Style.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
range.Style.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;
range.Style.Borders[BordersLineType.EdgeTop].Color = Color.Black;
自动换行
当单元格内容超出列宽时,启用自动换行可在同一个单元格中显示多行内容,避免重要信息被截断。
sheet.Range["A8"].Text = "This is a very long sentence that will automatically wrap within the cell.";
sheet.Range["A8"].Style.WrapText = true;
sheet.SetColumnWidth(1, 20);
sheet.SetRowHeight(8, 60);
第 2 部分:设置单元格值格式
值格式设置仅改变数据的显示方式,而不会修改底层数据。这对于业务和财务电子表格尤为重要。
设置数字格式
数字格式可控制小数位数、千位分隔符、科学计数法等显示规则。选择合适的格式有助于提高数据的准确性和可读性。
sheet.Range["A10"].NumberValue = 1234567.891;
sheet.Range["A10"].NumberFormat = "#,##0.00";
设置货币格式
货币格式可根据需求自动显示货币符号和小数精度。这种格式常用于发票、预算和财务报表。
sheet.Range["A11"].NumberValue = 5999.95;
sheet.Range["A11"].NumberFormat = "$#,##0.00";
设置日期格式
日期格式允许同一个日期值以不同样式显示,例如短日期、长日期或自定义格式。统一的日期格式使报表更易于理解。
sheet.Range["A12"].DateTimeValue = DateTime.Now;
sheet.Range["A12"].NumberFormat = "yyyy-MM-dd";
第 3 部分:设置区域和布局格式
与逐个单元格设置格式相比,对较大的工作表区域应用格式可以提高效率并保持一致性。
设置区域格式
一个区域可能包含多行和多列。将格式应用于区域可确保所有单元格具有一致的外观,并减少重复代码。
CellRange range = sheet.Range["A14:D18"];
range.Style.Color = Color.LightYellow;
range.Style.Font.IsBold = true;
range.Style.HorizontalAlignment = HorizontalAlignType.Center;
合并单元格
合并单元格通常用于报表标题和章节标题。合并后,可对内容进行居中和样式设置,以获得更专业的效果。
sheet.Range["A20:D20"].Merge();
sheet.Range["A20"].Text = "Monthly Sales Report";
sheet.Range["A20"].Style.Font.Size = 18;
sheet.Range["A20"].Style.Font.IsBold = true;
sheet.Range["A20"].Style.HorizontalAlignment = HorizontalAlignType.Center;
设置行和列格式
当特定区域中的所有单元格都需要采用相同样式时,对整行或整列进行格式设置非常有用,例如标题行或货币列。
sheet.Rows[21].Style.Font.IsBold = true;
sheet.Rows[21].Style.Color = Color.LightGray;
sheet.Columns[1].Style.NumberFormat = "$#,##0.00";
自动调整行高和列宽
AutoFit 会根据单元格内容自动调整行高和列宽。这有助于避免文本被截断,并提升生成的电子表格的展示效果。
sheet.AllocatedRange.AutoFitColumns();
sheet.AllocatedRange.AutoFitRows();
第 4 部分:应用高级格式
条件格式允许 Excel 根据单元格值自动应用样式。无需手动突出显示数据,即可通过规则识别趋势、异常或重要数值。
例如,您可以高亮显示超过阈值的数字、显示数据条、应用颜色刻度,或使用图标集来可视化绩效指标。这些功能使大型数据集更易于分析和理解。
sheet.Range["A25"].NumberValue = 1200;
sheet.Range["A26"].NumberValue = 800;
sheet.Range["A27"].NumberValue = 1500;
XlsConditionalFormats formats = sheet.ConditionalFormats.Add();
formats.AddRange(sheet.Range["A25:A27"]);
IConditionalFormat format = formats.AddCondition();
format.FormatType = ConditionalFormatType.CellValue;
format.FirstFormula = "1000";
format.Operator = ComparisonOperatorType.Greater;
format.BackColor = Color.LightGreen;
第 5 部分:设置 Excel 表格和工作表格式
格式设置也可以应用于工作表级别,以改善整个工作簿的结构和外观。
设置 Excel 表格格式
Excel 表格提供内置样式选项,例如标题格式、隔行颜色以及预定义主题。将数据区域转换为表格可以立即提升可读性和组织性。
sheet.Range["A30"].Text = "Product";
sheet.Range["B30"].Text = "Sales";
sheet.Range["A31"].Text = "Laptop";
sheet.Range["B31"].NumberValue = 5000;
sheet.Range["A32"].Text = "Monitor";
sheet.Range["B32"].NumberValue = 2000;
IListObject table = sheet.ListObjects.Create("SalesTable", sheet.Range["A30:B32"]);
table.BuiltInTableStyle = TableBuiltInStyles.TableStyleMedium2;
配置页面布局
页面布局设置决定了工作表在打印或导出时的显示效果。常见选项包括页面方向、页边距、打印区域、缩放比例以及重复标题行。
适当的页面设置可确保报表在屏幕和纸张上都呈现专业效果。
sheet.PageSetup.Orientation = PageOrientationType.Landscape;
sheet.PageSetup.LeftMargin = 0.5;
sheet.PageSetup.RightMargin = 0.5;
sheet.PageSetup.TopMargin = 0.75;
sheet.PageSetup.BottomMargin = 0.75;
sheet.PageSetup.FitToPagesWide = 1;
sheet.PageSetup.FitToPagesTall = 1;
第 6 部分:创建专业报表示例
在实际场景中,通常会组合使用多种格式设置技术。一个典型报表可能包括合并标题、自定义字体、彩色表头、边框、数字格式、条件格式以及优化后的页面设置。
通过结合这些功能,您可以生成无需手动编辑即可直接分发的精美 Excel 文档。
using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.Collections;
using Spire.Xls.Core;
using System.Drawing;
class Program
{
static void Main()
{
// 创建新的工作簿
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "销售汇总报表";
// 标题行
CellRange title = sheet.Range["A1:E1"];
title.Merge();
title.Text = "销售汇总报表";
title.Style.Font.FontName = "宋体";
title.Style.Font.Size = 16;
title.Style.Font.Color = Color.White;
title.Style.Color = Color.DarkBlue;
title.Style.HorizontalAlignment = HorizontalAlignType.Center;
title.Style.VerticalAlignment = VerticalAlignType.Center;
sheet.Rows[0].RowHeight = 30;
// 表头
string[] headers = { "订单编号", "产品名称", "销售区域", "订单日期", "销售金额" };
for (int i = 0; i < headers.Length; i++)
{
CellRange cell = sheet.Range[2, i + 1];
cell.Text = headers[i];
cell.Style.Font.IsBold = true;
cell.Style.Color = Color.LightGray;
cell.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Medium;
cell.Style.Borders[BordersLineType.EdgeBottom].Color = Color.DarkBlue;
}
// 数据
object[][] data =
{
new object[] { 1001, "笔记本电脑", "北区", "2024-01-15", 15000 },
new object[] { 1002, "显示器", "西区", "2024-02-10", 12000 },
new object[] { 1003, "键盘", "东区", "2024-03-05", 13500 },
new object[] { 1004, "鼠标", "南区", "2024-04-12", 16000 }
};
for (int r = 0; r < data.Length; r++)
{
for (int c = 0; c < data[r].Length; c++)
{
CellRange cell = sheet.Range[r + 3, c + 1];
var value = data[r][c];
// 隔行填充不同背景色
cell.Style.Color = (r % 2 == 0)
? Color.LightYellow
: Color.LightCyan;
if (c == 3) // 订单日期
{
cell.DateTimeValue = DateTime.Parse(value.ToString());
cell.NumberFormat = "yyyy-MM-dd";
}
else if (c == 4) // 销售金额
{
cell.NumberValue = Convert.ToDouble(value);
cell.NumberFormat = "\"¥\"#,##0.00";
}
else
{
cell.Text = value.ToString();
}
}
}
// 添加边框
CellRange range = sheet.Range["A2:E6"];
range.BorderAround(LineStyleType.Medium, Color.Black);
range.BorderInside(LineStyleType.Thin, Color.Gray);
// 自动调整列宽
for (int i = 1; i <= 5; i++)
{
sheet.AutoFitColumn(i);
}
// 条件格式
XlsConditionalFormats formats = sheet.ConditionalFormats.Add();
formats.AddRange(sheet.Range["E3:E6"]);
IConditionalFormat condition = formats.AddCondition();
condition.FormatType = ConditionalFormatType.CellValue;
condition.Operator = ComparisonOperatorType.Greater;
condition.FirstFormula = "14000";
condition.FontColor = Color.Red;
condition.IsBold = true;
// 对齐和布局格式设置
CellRange all = sheet.AllocatedRange;
for (int r = 1; r < all.RowCount; r++)
{
all.Rows[r].HorizontalAlignment = HorizontalAlignType.Center;
all.Rows[r].VerticalAlignment = VerticalAlignType.Center;
all.Rows[r].RowHeight = 20;
}
for (int c = 0; c < all.ColumnCount; c++)
{
all.Columns[c].ColumnWidth = (c == 1) ? 19 : 14;
}
// 保存文件
workbook.SaveToFile("销售汇总报表.xlsx", ExcelVersion.Version2016);
workbook.Dispose();
}
}
输出:

结论
格式化是创建专业 Excel 文档的重要步骤。借助 Spire.XLS for .NET,您可以高效地自定义单元格外观、控制数字和日期格式、管理工作表布局、应用条件格式,并完全通过 C# 构建视觉效果出色的报表。
通过使用本指南介绍的技术,您可以自动化 Excel 格式化任务,并生成适用于业务、报表和数据分析场景的高质量电子表格。
常见问题
我可以在不安装 Microsoft Excel 的情况下格式化 Excel 文件吗?
可以。Spire.XLS for .NET 独立于 Microsoft Excel 运行,可直接通过代码创建、编辑和格式化电子表格。
格式设置会更改单元格的实际值吗?
不会。大多数格式化操作仅影响数据的显示方式。除非显式修改,否则底层值保持不变。
我可以一次将相同样式应用于多个单元格吗?
可以。样式可应用于区域、行、列或整个工作表,从而轻松保持格式一致性。
Spire.XLS 是否支持条件格式?
支持。该库支持常见的条件格式功能,包括突出显示规则、数据条、颜色刻度和图标集。
支持哪些 Excel 格式?
Spire.XLS 支持 XLS、XLSX、XLSM、CSV 以及其他多种电子表格格式的读取和写入。







