# dotNet.ReoGrid 扩展库 - 数据格式化

要指定数据格式，请使用工作表的 `SetRangeDataFormat` 方法：

```aardio
var sheet1 = reoGridControl.CurrentWorksheet;
sheet1.SetRangeDataFormat(range, formatFlag, argument);
```

参数 formatFlag 指定 ReoGrid.DataFormat.CellDataFormatFlag 枚举值。
参数 argument 为可选参数。

例如：

```aardio
sheet1.SetRangeDataFormat("A1:B2", ReoGrid.DataFormat.CellDataFormatFlag.Number, 
    {
        // 小数位数，例如 0.1234
        DecimalPlaces = 4,
        // 负数样式，例如 -123 显示为 (123)
        NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets,
        // 使用千位分隔符，例如 123,456
        UseSeparator = true
    }
);
```

或者使用 action 操作（可通过调用 Undo 方法或按 Ctrl+Z 撤销）：

```aardio
reoGridControl.DoAction(SetRangeDataFormatAction(range, formatFlag, [可选] dataFormatArgs = null));
```

测试代码：

```aardio
sheet1["B2"] = 12345;
sheet1["C2"] = 12345.67890;
sheet1["B3"] = -1234;
sheet1["C3"] = -1234.56789;
```

![示例图像](../images/52-2.png)

## 可用数据格式

| 类型 | CellDataFormatFlag | 参数 |
| --- | --- | --- |
| 数字 | ReoGrid.DataFormat.CellDataFormatFlag.Number | ReoGrid.DataFormat.NumberDataFormatter.NumberFormatArgs |
| 日期时间 | ReoGrid.DataFormat.CellDataFormatFlag.DateTime | ReoGrid.DataFormat.DateTimeDataFormatter.DateTimeFormatArgs |
| 百分比 | ReoGrid.DataFormat.CellDataFormatFlag.Percent | ReoGrid.DataFormat.PercentDataFormatter.NumberFormatArgs |
| 货币 | ReoGrid.DataFormat.CellDataFormatFlag.Currency | ReoGrid.DataFormat.CurrencyDataFormatter.CurrencyFormatArgs |
| 文本 | ReoGrid.DataFormat.CellDataFormatFlag.Text | 无 |
| 自定义扩展 | ReoGrid.DataFormat.CellDataFormatFlag.Custom | 任意对象 |

## 数字格式

数字格式提供通用的数字格式化功能，可指定千位分隔符、小数位数和负数样式。

![数字格式示例](../images/322.png)

示例：

![数字格式示例2](../images/47-1.png)

设置单元格为数字格式的代码：

```aardio

var numArgs = ReoGrid.DataFormat.NumberDataFormatter.NumberFormatArgs();
numArgs.DecimalPlaces = 4  // 小数位数 0.1234
numArgs.UseSeparator = true  // 使用千位分隔符：123,456 
sheet1.SetRangeDataFormat("A1:E7", ReoGrid.DataFormat.CellDataFormatFlag.Number, numArgs);
```

### 负数样式

负数样式定义在枚举 `NumberNegativeStyle` 中。

ReoGrid 提供以下样式来格式化负数：

| **负数样式** | **示例** | **枚举值** |
| :-- | :-- | :-- |
| 无样式 | -123,456.789 | Minus |
| 红色 | 123,456.789 | Red |
| 红色减号 | -123,456.789 | Red | Minus |
| 括号 | (123,456.789) | Brackets |
| 红色括号 | (123,456.789) | Brackets | Red |
| 红色括号减号 | (-123,456.789) | Brackets | Red | Minus |
| 日文前缀 | ▲ 123,456,789 | Prefix_Sankaku |
| 日文前缀(ReoGrid Pro) | ▲ 123,456,789 | Prefix_Sankaku | Red |

示例：

![负数样式示例](../images/323.png)

```aardio
var sheet1 = grid.CurrentWorksheet;

var numArgs = ReoGrid.DataFormat.NumberDataFormatter.NumberFormatArgs();
numArgs.DecimalPlaces = 3;
numArgs.UseSeparator = true;
numArgs.NegativeStyle = ReoGrid.DataFormat.NumberDataFormatter.NumberNegativeStyle.RedBrackets;

sheet1.SetRangeDataFormat("B2", ReoGrid.DataFormat.CellDataFormatFlag.Number, numArgs);
sheet1["B2"] = -12345.67;
```

### 日期时间格式

![日期时间格式示例](../images/48-2.png)

```aardio
var timeArgs = ReoGrid.DataFormat.DateTimeDataFormatter.DateTimeFormatArgs();
timeArgs.CultureName = "en-US" // 区域设置
timeArgs.Format = "yyyy/MM/dd" // 格式模式

sheet1.SetRangeDataFormat(RangePosition.EntireRange, ReoGrid.DataFormat.CellDataFormatFlag.DateTime,timeArgs);
```

### 百分比格式

![百分比格式示例](../images/49-2.png)

```aardio
sheet1.SetRangeDataFormat(
    RangePosition.EntireRange, 
    ReoGrid.DataFormat.CellDataFormatFlag.Percent,
    ReoGrid.DataFormat.NumberDataFormatter.NoDecimalDigitsArgument
);
```

### 货币格式

货币格式继承自数字格式，可以指定货币符号在数字前或后。例如：

![货币格式示例](../images/325.png)

```aardio
var sheet1 = grid.CurrentWorksheet;

var currencyArgs = ReoGrid.DataFormat.CurrencyDataFormatter.CurrencyFormatArgs();
currencyArgs.CultureEnglishName = "en-US"
currencyArgs.DecimalPlaces = 2
currencyArgs.UseSeparator = true
currencyArgs.PrefixSymbol = "$"

sheet1.SetRangeDataFormat("B2", ReoGrid.DataFormat.CellDataFormatFlag.Currency,currencyArgs);
sheet1["B2"] = 1234;
```

#### 在符号和数字之间添加空格

可以在货币符号后添加空格，例如：

![货币格式空格示例](../images/324.png)

```aardio

sheet1.SetRangeDataFormat("B2", ReoGrid.DataFormat.CellDataFormatFlag.Currency,formatArgs);
```

示例：设置后缀符号

![货币后缀示例](../images/326.png)

```aardio
var formatArgs = ReoGrid.DataFormat.CurrencyDataFormatter.CurrencyFormatArgs();
formatArgs.CultureEnglishName = "en-US"
formatArgs.DecimalPlaces = 2
formatArgs.UseSeparator = true
formatArgs.PostfixSymbol = " USD"

sheet1.SetRangeDataFormat("B2", ReoGrid.DataFormat.CellDataFormatFlag.Currency,formatArgs);
```

### 文本格式

将数据格式设置为 `Text` 可以防止数据被格式化。

![文本格式示例](../images/51-2.png)

```aardio
sheet1.SetRangeDataFormat(RangePosition.EntireRange, ReoGrid.DataFormat.CellDataFormatFlag.Text);
```

## 自定义单元格数据格式化器

要添加自定义单元格数据格式化器，请参阅[自定义数据格式](../cell/custom-data-formatter.html)。