# dotNet.ReoGrid 扩展库 - 样式设置

创建并使用 `WorksheetRangeStyle` 对象来为单元格或区域设置样式，通过工作表的 `SetRangeStyles` 方法应用样式。ReoGrid 使用 `PlainStyleFlag` 枚举来确定需要处理的样式类型。

## 设置样式

有多种方式可以设置单元格或区域的样式：

### 调用工作表方法

使用工作表的 `SetRangeStyles` 方法设置样式：


```aardio
//创建样式。注意 dotNet.ReoGrid 扩展库需要升级到最新版，不然返回值为是 null 。
var style = ReoGrid.WorksheetRangeStyle()
style.Flag = ReoGrid.PlainStyleFlag.BackColor
style.BackColor = ReoGrid.Graphics.SolidColor.SkyBlue
style.TextColor = ReoGrid.Graphics.SolidColor.Red

// 为 B1:E5 区域设置天蓝色背景，红色字体
sheet1.SetRangeStyles("B1:E5", style);
```

创建 ReoGrid.WorksheetRangeStyle 对象时也可以在构造参数中传一个表对象，
直接指定要初始化的字段值，示例如下：

```aardio
sheet1.SetRangeStyles("B1:E5", ReoGrid.WorksheetRangeStyle( 
	BackColor = ReoGrid.Graphics.SolidColor.SkyBlue,
	TextColor = ReoGrid.Graphics.SolidColor.Red
) );
```

这与 C# 的初始化语法很像，但是在 aardio 中构造参数中的表是一个实参而非初始化对象字段的语法糖。
ReoGrid.WorksheetRangeStyle 原本并不支持表参数，但 dotNet.ReoGrid 库扩展了这个类。

这带来一个额外的好处，我们不需要指定比较麻烦的 Flag 字段。
aardio 会从表参数实际包含的字段就可以自动生成 Flag 的值（前提是调用代码没有指定 Flag 的值）。


### 使用单元格或区域实例

我们也可以在获取单元格或区域对象的实例后直接修改其 `Style` 属性：

```aardio
// 设置单个单元格样式
var cell = sheet1.Cells["B3"];
cell.Style.BackColor = ReoGrid.Graphics.SolidColor.SkyBlue;

// 设置区域样式
var range = sheet1.Ranges["B1:C3"];
range.Style.BackColor = ReoGrid.Graphics.SolidColor.LightYellow;
```

### 使用动作（支持撤销/重做）

通过动作设置样式可支持撤销和重做操作：

```aardio
// 创建设置样式动作并执行
var action = ReoGrid.SetRangeStyleAction(range, style);
grid.DoAction(action);
```

## 获取样式

获取样式的方式包括：

### 调用工作表方法

```aardio
// 获取区域样式
var style = sheet1.GetRangeStyle(range);

// 获取单元格样式
var cellStyle = sheet1.GetCellStyle(pos);
```

### 使用单元格或区域实例

```aardio
// 获取单元格背景色
var cell = sheet1.Cells["B3"];
var backColor = cell.Style.BackColor;

// 获取区域背景色
var range = sheet1.Ranges["B1:C3"];
var rangeColor = range.Style.BackColor;
```

## 样式项说明

使用 `SetRangeStyles` 方法时，`WorksheetRangeStyle` 对象支持以下样式项：

| **样式项** | **PlainStyleFlag值** | **属性名** | **属性类型** |
| :-- | :-- | :-- | :-- |
| 背景色 | BackColor | BackColor | `ReoGrid.Graphics.SolidColor` |
| 背景图案样式 | FillPatternStyle | FillPatternStyle | `ReoGrid.Graphics.HatchStyles` |
| 背景图案颜色 | FillPatternColor | FillPatternColor | `ReoGrid.Graphics.SolidColor` |
| 文字颜色 | TextColor | TextColor | `ReoGrid.Graphics.SolidColor` |
| 字体名称 | FontName | FontName | 字符串 |
| 字体大小 | FontSize | FontSize | 数值 |
| 字体样式：粗体 | FontStyleBold | Bold | 布尔值 |
| 字体样式：斜体 | FontStyleItalic | Italic | 布尔值 |
| 字体样式：下划线 | FontStyleUnderline | Underline | 布尔值 |
| 字体样式：删除线 | FontStyleStrikethrough | Strikethrough | 布尔值 |
| 水平对齐 | HorizontalAlign | HAlign | `ReoGrid.ReoGridHorAlign` |
| 垂直对齐 | VerticalAlign | VAlign | `ReoGrid.ReoGridVerAlign` |
| 文本缩进 | Indent | Indent | 数值 |
| 换行模式 | TextWrap | TextWrapMode | `ReoGrid.TextWrapMode` |
| 旋转角度 | RotateAngle | RotateAngle | 数值 (-90° ~ 90°) |
| 单元格内边距 | Padding | Padding | `ReoGrid.PaddingValue` |

## 背景色设置

为 B1:E5 区域设置天蓝色背景：

```aardio
// 为 B1:E5 区域设置天蓝色背景
sheet1.SetRangeStyles("B1:E5", ReoGrid.WorksheetRangeStyle( 
	BackColor = ReoGrid.Graphics.SolidColor.SkyBlue
) );
```

注意必须设置 `Flag` 属性以指定要应用的样式类型。

## 背景图案设置

为整个表格设置背景图案：

```aardio
import win.ui;
/*DSG{{*/
var winform = win.form(text="ReoGrid - 设置背景样式")
/*}}*/

import dotNet.ReoGrid; 
var grid = ReoGrid.ReoGridControl(winform);
var sheet1 = grid.CurrentWorksheet;

//为整个表格设置背景样式
sheet1.SetRangeStyles(ReoGrid.RangePosition.EntireRange
	,ReoGrid.WorksheetRangeStyle( 
		BackColor = ReoGrid.Graphics.SolidColor.SkyBlue,
		FillPatternColor = ReoGrid.Graphics.SolidColor.SkyBlue,
		FillPatternStyle = System.Drawing.Drawing2D.HatchStyle.DiagonalBrick
	) 
);

winform.show();
win.loopMessage();
```

## 文字颜色设置

设置文字为红色：

```aardio
sheet1.SetRangeStyles("B1:E5", ReoGrid.WorksheetRangeStyle(  
	TextColor = ReoGrid.Graphics.SolidColor.Red
) );
``` 

## 文本对齐设置

文本可以设置水平和垂直两个方向的对齐方式。

设置水平居中对齐：

```aardio
sheet1.SetRangeStyles("A1:E5", ReoGrid.WorksheetRangeStyle( 
	HAlign = ReoGrid.ReoGridHorAlign.Center
) );
```

## 文本换行设置

设置文本自动换行（默认为不换行）：

```aardio
sheet1.SetRangeStyles("A1:E5", ReoGrid.WorksheetRangeStyle( 
	TextWrapMode = ReoGrid.TextWrapMode.WordBreak
) );
```

## 文本旋转设置

通过设置旋转角度来旋转单元格内文本：

```aardio
var cell = sheet1.Cells["A1"];
cell.Data = "Hello World";
cell.Style.RotateAngle = 90;  // 旋转90度
```

## 字体设置

修改字体名称和大小：

```aardio
sheet1.SetRangeStyles("A1:E5", ReoGrid.WorksheetRangeStyle( 
	FontName = "Segoe UI",
	FontSize = 20
) );
```

设置各种字体样式的完整程序示例：

```aardio
import win.ui;
/*DSG{{*/
var winform = win.form(text="ReoGrid - 设置样式")
/*}}*/

import dotNet.ReoGrid; 
var grid = ReoGrid.ReoGridControl(winform);
var sheet1 = grid.CurrentWorksheet;

// 设置粗体 
sheet1.SetRangeStyles("B2:C3", ReoGrid.WorksheetRangeStyle( 
	Bold = true 
) );

// 设置斜体 
sheet1.SetRangeStyles("C2", ReoGrid.WorksheetRangeStyle( 
	Italic = true,
	TextColor = ReoGrid.Graphics.SolidColor.Red
) );

// 直接设置单元格样式
sheet1.Cells["B3"].Style.Underline = true;
sheet1.Cells["C3"].Style.Strikethrough = true;

// 设置单元格数据
sheet1["B2:C3"] = {"Bold", "Italic,Red", "Underline", "Strikethrough"};

winform.show();
win.loopMessage();
```

## 移除样式

### 使用工作表方法

通过指定 `PlainStyleFlag` 来移除特定样式：

```aardio
// 移除指定区域的所有背景样式
sheet1.RemoveRangeStyles(ReoGrid.RangePosition(2, 2, 3, 3), ReoGrid.PlainStyleFlag.BackAll);
```

### 使用动作

通过动作移除样式：

```aardio
// 创建移除样式动作并执行
var action = ReoGrid.Actions.RemoveRangeStyleAction(
    ReoGrid.RangePosition(2, 2, 3, 3),
    ReoGrid.PlainStyleFlag.BackAll
);
grid.DoAction(action);
```
namespace unvell.ReoGrid;

**下面附上 ReoGrid.PlainStyleFlag 定义的 C# 源代码供参考**

```cs
namespace unvell.ReoGrid;

public enum PlainStyleFlag : long
{
	None = 0L,
	FontName = 1L,
	FontSize = 2L,
	FontStyleBold = 4L,
	FontStyleItalic = 8L,
	FontStyleStrikethrough = 16L,
	FontStyleUnderline = 32L,
	TextColor = 64L,
	BackColor = 128L,
	LineColor = 256L,
	LineStyle = 512L,
	LineWeight = 1024L,
	LineStartCap = 2048L,
	LineEndCap = 4096L,
	HorizontalAlign = 8192L,
	VerticalAlign = 16384L,
	FillPatternColor = 524288L,
	FillPatternStyle = 1048576L,
	TextWrap = 2097152L,
	Indent = 4194304L,
	Padding = 8388608L,
	RotationAngle = 16777216L,
	FontStyleAll = 60L,
	FontAll = 63L,
	LineAll = 7936L,
	LayoutAll = 27262976L,
	AlignAll = 24576L,
	FillPattern = 1572864L,
	BackAll = 1572992L,
	All = 28868607L
}
```