ReoGrid 通过数据格式化器格式化单元格的显示和解析。支持的格式类型包括数字、日期、百分比、货币、文本和自定义格式化器。
命名空间
using unvell.ReoGrid.DataFormat;
应用数据格式
在工作表上使用 SetRangeDataFormat:
var sheet = reoGridControl.CurrentWorksheet;
sheet.SetRangeDataFormat("A1:B2", CellDataFormatFlag.Number,
new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 4,
NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets,
UseSeparator = true,
});
支持撤销:
reoGridControl.DoAction(new SetRangeDataFormatAction("A1:B2",
CellDataFormatFlag.Number,
new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 2 }));
快速测试:
sheet["B2"] = 12345;
sheet["C2"] = 12345.67890;
sheet["B3"] = -1234;
sheet["C3"] = -1234.56789;

CellDataFormatFlag 枚举
| 值 | 说明 | 参数类型 |
|---|---|---|
General | 自动格式(文本和数字) | 无 |
Number | 数字格式 | NumberDataFormatter.NumberFormatArgs |
DateTime | 日期和时间格式 | DateTimeDataFormatter.DateTimeFormatArgs |
Percent | 百分比格式 | NumberDataFormatter.NumberFormatArgs |
Currency | 货币格式 | CurrencyDataFormatter.CurrencyFormatArgs |
Text | 纯文本(不格式化) | 无 |
Custom | 自定义数据格式化器 | 任意对象 |
数字格式
数字格式支持千位分隔符、小数位数和负数样式。

sheet.SetRangeDataFormat("A1:E7", CellDataFormatFlag.Number,
new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 4,
UseSeparator = true,
});
NumberFormatArgs 属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
DecimalPlaces | short | 2 | 显示的小数位数 |
UseSeparator | bool | false | 显示千位分隔符 |
NegativeStyle | NumberNegativeStyle | Minus | 负数的显示方式 |
CustomNegativePrefix | string | null | 负数的自定义前缀(用于 CustomSymbol 样式) |
CustomNegativePostfix | string | null | 负数的自定义后缀(用于 CustomSymbol 样式) |
NumberNegativeStyle 枚举(标志位)
| 样式 | 值 | 示例 | 说明 |
|---|---|---|---|
Minus(默认) | 0x1 | -123,456.789 | 普通负号 |
Red | 0x2 | 123,456.789 | 红色文本,无负号 |
Brackets | 0x4 | (123,456.789) | 括号包围 |
RedMinus | 0x3 | -123,456.789 | 红色文本带负号 |
BracketsMinus | 0x5 | (-123,456.789) | 括号带负号 |
RedBrackets | 0x6 | (123,456.789) | 红色文本带括号 |
RedBracketsMinus | 0x7 | (-123,456.789) | 红色、括号和负号 |
Prefix_Sankaku | 0x8 | ▲ 123,456.789 | 日式三角前缀 |
CustomSymbol | 0xf0 | — | 使用 CustomNegativePrefix / CustomNegativePostfix |
这是一个标志位枚举 — 值可以使用 | 组合:
NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Brackets | NumberDataFormatter.NumberNegativeStyle.Red
负数示例

sheet.SetRangeDataFormat("B2", CellDataFormatFlag.Number,
new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 3,
NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets,
UseSeparator = true,
});
sheet["B2"] = -12345.67;
日期时间格式
使用标准 .NET 日期时间模式指定区域设置和格式模式:

sheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.DateTime,
new DateTimeDataFormatter.DateTimeFormatArgs
{
CultureName = "en-US",
Format = "yyyy/MM/dd",
});
DateTimeFormatArgs 属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Format | string | null | .NET 日期时间格式模式(如 "yyyy/MM/dd"、"MM/dd/yyyy HH:mm") |
CultureName | string | null | 本地化的区域名称(如 "en-US"、"ja-JP") |
注意:
DateTimeFormatArgs是一个struct,不是类。
百分比格式
值以百分比形式显示。使用 NumberFormatArgs 进行配置:

sheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.Percent,
new NumberDataFormatter.NumberFormatArgs
{
DecimalPlaces = 2,
});
单元格值 0.5 显示为 50.00%。
货币格式
货币格式在数字格式的基础上扩展,将货币符号放置在值的前面或后面。

sheet.SetRangeDataFormat("B2", CellDataFormatFlag.Currency,
new CurrencyDataFormatter.CurrencyFormatArgs
{
CultureEnglishName = "en-US",
DecimalPlaces = 2,
UseSeparator = true,
PrefixSymbol = "$",
});
sheet["B2"] = 1234;
CurrencyFormatArgs 属性
CurrencyFormatArgs 继承自 NumberFormatArgs 并添加了货币特定属性:
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
PrefixSymbol | string | null | 放置在数字前面的符号(如 "$"、"$ ") |
PostfixSymbol | string | null | 放置在数字后面的符号(如 " USD"、" 円") |
CultureEnglishName | string | null | 区域名称(如 "en-US") |
DecimalPlaces | short | 2 | 小数位数(继承) |
UseSeparator | bool | false | 显示千位分隔符(继承) |
NegativeStyle | NumberNegativeStyle | Minus | 负数显示样式(继承) |
带空格的前缀

sheet.SetRangeDataFormat("B2", CellDataFormatFlag.Currency,
new CurrencyDataFormatter.CurrencyFormatArgs
{
CultureEnglishName = "en-US",
DecimalPlaces = 2,
UseSeparator = true,
PrefixSymbol = "$ ", // 注意末尾的空格
});
后缀符号

sheet.SetRangeDataFormat("B2", CellDataFormatFlag.Currency,
new CurrencyDataFormatter.CurrencyFormatArgs
{
CultureEnglishName = "en-US",
DecimalPlaces = 2,
UseSeparator = true,
PostfixSymbol = " USD",
});
文本格式
使用 Text 将值保持为原始字符串,不进行格式化:

sheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.Text, null);
单元格数据格式属性
访问单个单元格上的格式:
var cell = sheet.Cells["A1"];
// 获取当前格式
CellDataFormatFlag format = cell.DataFormat;
object formatArgs = cell.DataFormatArgs;
// 设置格式
cell.SetDataFormat(CellDataFormatFlag.Number,
new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 3 });
| 属性 | 类型 | 说明 |
|---|---|---|
DataFormat | CellDataFormatFlag | 单元格的数据格式类型 |
DataFormatArgs | object | 格式特定参数 |
CustomDataFormatter | IDataFormatter | 自定义数据格式化器实现 |
自定义数据格式化器
实现 IDataFormatter 以创建自定义格式化器:
public interface IDataFormatter
{
string FormatCell(Cell cell);
bool PerformTestFormat();
}
| 方法 | 说明 |
|---|---|
FormatCell(Cell cell) | 格式化单元格的数据。成功时返回非空字符串,返回 null 则跳过。 |
PerformTestFormat() | 返回 true 则在格式化前检查数据类型,返回 false 则跳过检查。 |
使用 CellDataFormatFlag.Custom 应用:
sheet.SetRangeDataFormat("A1", CellDataFormatFlag.Custom, myFormatterArgs);
// 或直接在单元格上设置
cell.CustomDataFormatter = new MyCustomFormatter();
详见 自定义数据格式 了解详细示例。