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;

52 (2)

CellDataFormatFlag 枚举

说明参数类型
General自动格式(文本和数字)
Number数字格式NumberDataFormatter.NumberFormatArgs
DateTime日期和时间格式DateTimeDataFormatter.DateTimeFormatArgs
Percent百分比格式NumberDataFormatter.NumberFormatArgs
Currency货币格式CurrencyDataFormatter.CurrencyFormatArgs
Text纯文本(不格式化)
Custom自定义数据格式化器任意对象

数字格式

数字格式支持千位分隔符、小数位数和负数样式。

322

sheet.SetRangeDataFormat("A1:E7", CellDataFormatFlag.Number,
    new NumberDataFormatter.NumberFormatArgs
    {
        DecimalPlaces = 4,
        UseSeparator = true,
    });

NumberFormatArgs 属性

属性类型默认值说明
DecimalPlacesshort2显示的小数位数
UseSeparatorboolfalse显示千位分隔符
NegativeStyleNumberNegativeStyleMinus负数的显示方式
CustomNegativePrefixstringnull负数的自定义前缀(用于 CustomSymbol 样式)
CustomNegativePostfixstringnull负数的自定义后缀(用于 CustomSymbol 样式)

NumberNegativeStyle 枚举(标志位)

样式示例说明
Minus(默认)0x1-123,456.789普通负号
Red0x2123,456.789红色文本,无负号
Brackets0x4(123,456.789)括号包围
RedMinus0x3-123,456.789红色文本带负号
BracketsMinus0x5(-123,456.789)括号带负号
RedBrackets0x6(123,456.789)红色文本带括号
RedBracketsMinus0x7(-123,456.789)红色、括号和负号
Prefix_Sankaku0x8▲ 123,456.789日式三角前缀
CustomSymbol0xf0使用 CustomNegativePrefix / CustomNegativePostfix

这是一个标志位枚举 — 值可以使用 | 组合:

NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Brackets | NumberDataFormatter.NumberNegativeStyle.Red

负数示例

323

sheet.SetRangeDataFormat("B2", CellDataFormatFlag.Number,
    new NumberDataFormatter.NumberFormatArgs
    {
        DecimalPlaces = 3,
        NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets,
        UseSeparator = true,
    });

sheet["B2"] = -12345.67;

日期时间格式

使用标准 .NET 日期时间模式指定区域设置和格式模式:

48 (2)

sheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.DateTime,
    new DateTimeDataFormatter.DateTimeFormatArgs
    {
        CultureName = "en-US",
        Format = "yyyy/MM/dd",
    });

DateTimeFormatArgs 属性

属性类型默认值说明
Formatstringnull.NET 日期时间格式模式(如 "yyyy/MM/dd""MM/dd/yyyy HH:mm"
CultureNamestringnull本地化的区域名称(如 "en-US""ja-JP"

注意: DateTimeFormatArgs 是一个 struct,不是类。

百分比格式

值以百分比形式显示。使用 NumberFormatArgs 进行配置:

49 (2)

sheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.Percent,
    new NumberDataFormatter.NumberFormatArgs
    {
        DecimalPlaces = 2,
    });

单元格值 0.5 显示为 50.00%

货币格式

货币格式在数字格式的基础上扩展,将货币符号放置在值的前面或后面。

325

sheet.SetRangeDataFormat("B2", CellDataFormatFlag.Currency,
    new CurrencyDataFormatter.CurrencyFormatArgs
    {
        CultureEnglishName = "en-US",
        DecimalPlaces = 2,
        UseSeparator = true,
        PrefixSymbol = "$",
    });

sheet["B2"] = 1234;

CurrencyFormatArgs 属性

CurrencyFormatArgs 继承自 NumberFormatArgs 并添加了货币特定属性:

属性类型默认值说明
PrefixSymbolstringnull放置在数字前面的符号(如 "$""$ "
PostfixSymbolstringnull放置在数字后面的符号(如 " USD"" 円"
CultureEnglishNamestringnull区域名称(如 "en-US"
DecimalPlacesshort2小数位数(继承)
UseSeparatorboolfalse显示千位分隔符(继承)
NegativeStyleNumberNegativeStyleMinus负数显示样式(继承)

带空格的前缀

324

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

后缀符号

326

sheet.SetRangeDataFormat("B2", CellDataFormatFlag.Currency,
    new CurrencyDataFormatter.CurrencyFormatArgs
    {
        CultureEnglishName = "en-US",
        DecimalPlaces = 2,
        UseSeparator = true,
        PostfixSymbol = " USD",
    });

文本格式

使用 Text 将值保持为原始字符串,不进行格式化:

51 (2)

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 });
属性类型说明
DataFormatCellDataFormatFlag单元格的数据格式类型
DataFormatArgsobject格式特定参数
CustomDataFormatterIDataFormatter自定义数据格式化器实现

自定义数据格式化器

实现 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();

详见 自定义数据格式 了解详细示例。

相关主题

这篇文章对您有帮助吗?