在 Excel 工作表中,原始数据通常显示为缺乏直观性的普通数字。通过设置数字格式,可以将这些数字转换成更容易理解的形式。例如,将销售额数据设置为货币格式,即添加货币符号和千位分隔符,可使所代表的金额一目了然。将市场份额数据格式化为百分比格式,可以清楚地显示各部分的比例,便于快速比较和分析。本文将介绍如何使用 Spire.XLS for .NET 通过 C# 设置 Excel 单元格中的数字格式 。
安装 Spire.XLS for .NET
E-iceblue旗下Spire是国产文档处理领域的优秀产品,支持国产化开发。首先,您需要将 Spire.XLS for .NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.XLS
Excel 数字格式中的符号
在 Excel 数字格式代码中,需要用到一些符号来定义数字的显示方式。下面是常用符号的详细解释:
符号 | 描述 |
0 | 必填数字占位符。如果数字的位数少于“0”的个数,Excel 会在数字前或后添加 0 以填满占位符 |
# | 可选数字占位符。不显示无意义的零。 |
? | 可选数字占位符。可以使具有不同小数位数的数字在小数点处对齐。 |
. | 代表小数点。 |
, | 代表千位分隔符。 |
; | 用于分隔正值、负值、零值和文本值的数字格式的不同部分。 |
% | 百分比符号。将数字乘以 100 并显示为百分比形式。 |
E - + | 代表科学计数法符号。 |
$, €, ¥, etc. | 代表相应的货币符号。 |
[Color] | 用于指定数字的颜色。 |
Date/Time (yyyy, mmmm, mm, dd, hh, ss, AM/PM) | 分别代表年、全月名、月、日、时、分、秒和 12 小时时钟标记。 |
C# 设置 Excel 中的数字格式
Spire.XLS for .NET 提供了用于设置单元格数值的 CellRange.NumberValue 属性和用于设置数字格式的 CellRange.NumberFormat 属性。具体步骤如下:
- 创建 Workbook 类的对象。
- 通过 Workbook.Worksheets[] 属性获取指定的工作表。
- 通过 Workbook.Range[] 属性获取指定的单元格。
- 通过 CellRange.Text 属性向指定单元格添加文本。
- 通过 CellRange.NumberValue 属性为指定单元格添加数值,然后通过 CellRange.NumberFormat 属性设置数字格式。
- 使用 Workbook.SaveToFile() 方法保存结果文件。
using Spire.Xls; namespace SetNumberFormat { class Program { static void Main(string[] args) { // 创建Workbook类的对象 Workbook workbook = new Workbook(); // 获取第一张工作表 Worksheet sheet = workbook.Worksheets[0]; // 在指定单元格中添加文本并设置单元格样式 sheet.Range["B3"].Text = "输入"; sheet.Range["C3"].Text = "数字格式"; sheet.Range["D3"].Text = "输出"; sheet.Range["E3"].Text = "备注"; sheet.Range["B3:E3"].Style.Font.IsBold = true; sheet.Range["B3:E3"].Style.KnownColor = ExcelColors.SkyBlue; // 用零填充的数字 sheet.Range["B4"].Text = "123"; sheet.Range["C4"].Text = "0000"; sheet.Range["D4"].NumberValue = 123; sheet.Range["D4"].NumberFormat = "0000"; sheet.Range["E4"].Text = "用零填充的数字"; // 带千位分隔符的两位数小数 sheet.Range["B5"].Text = "1234.5678"; sheet.Range["C5"].Text = "#,##0.00"; sheet.Range["D5"].NumberValue = 1234.5678; sheet.Range["D5"].NumberFormat = "#,##0.00"; sheet.Range["E5"].Text = "带千位分隔符的两位数小数"; // 负数用红色表示 sheet.Range["B6"].Text = "-1234.5678"; sheet.Range["C6"].Text = "0;[Red]-0"; sheet.Range["D6"].NumberValue = -1234.5678; sheet.Range["D6"].NumberFormat = "0;[Red]-0"; sheet.Range["E6"].Text = "负数用红色表示"; // 带一位小数的百分比 sheet.Range["B7"].Text = "0.12345"; sheet.Range["C7"].Text = "0.0%"; sheet.Range["D7"].NumberValue = 0.12345; sheet.Range["D7"].NumberFormat = "0.0%"; sheet.Range["E7"].Text = "带一位小数的百分比"; // 带文本的数字 sheet.Range["B8"].Text = "1234.5678"; sheet.Range["C8"].Text = "\"Quantity: \"0"; sheet.Range["D8"].NumberValue = 1234.5678; sheet.Range["D8"].NumberFormat = "\"数量: \"0"; sheet.Range["E8"].Text = "带文本的数字"; // 带货币符号的数字 sheet.Range["B9"].Text = "1234.5678"; sheet.Range["C9"].Text = "$#,##0.00"; sheet.Range["D9"].NumberValue = 1234.5678; sheet.Range["D9"].NumberFormat = "$#,##0.00"; sheet.Range["E9"].Text = "带货币符号的数字"; // 科学记数法格式 sheet.Range["B10"].Text = "1234.5678"; sheet.Range["C10"].Text = "0.00E+00"; sheet.Range["D10"].NumberValue = 1234.5678; sheet.Range["D10"].NumberFormat = "0.00E+00"; sheet.Range["E10"].Text = "科学记数法"; // 分数 sheet.Range["B11"].Text = "0.5"; sheet.Range["C11"].Text = "# ?/?"; sheet.Range["D11"].NumberValue = 0.5; sheet.Range["D11"].NumberFormat = "# ?/?"; sheet.Range["E11"].Text = "分数"; // 日期 sheet.Range["B12"].Text = "45930"; sheet.Range["C12"].Text = "yyyy-MM-dd"; sheet.Range["D12"].NumberValue = 45930; sheet.Range["D12"].NumberFormat = "yyyy-MM-dd"; sheet.Range["E12"].Text = "日期"; // 时间 sheet.Range["B13"].Text = "0.5"; sheet.Range["C13"].Text = "h:mm:ss AM/PM"; sheet.Range["D13"].NumberValue = 0.5; sheet.Range["D13"].NumberFormat = "h:mm:ss AM/PM"; sheet.Range["E13"].Text = "时间"; // 设置单元格样式 sheet.AllocatedRange.Style.Font.FontName = "Calibri"; sheet.AllocatedRange.Style.Font.Size = 11; sheet.AllocatedRange.Style.HorizontalAlignment = HorizontalAlignType.Left; // 自适应列宽 sheet.AutoFitColumn(2); sheet.AutoFitColumn(3); sheet.AutoFitColumn(4); sheet.AutoFitColumn(5); // 保存结果文件 workbook.SaveToFile("Excel数字格式.xlsx", ExcelVersion.Version2016); } } }