创建并使用 WorksheetRangeStyle 对象来为单元格或区域设置样式,通过工作表的 SetRangeStyles 方法应用样式。ReoGrid 使用 PlainStyleFlag 枚举来确定需要处理的样式类型。
有多种方式可以设置单元格或区域的样式:
使用工作表的 SetRangeStyles 方法设置样式:
//创建样式。注意 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 对象时也可以在构造参数中传一个表对象, 直接指定要初始化的字段值,示例如下:
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 属性:
// 设置单个单元格样式
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;
通过动作设置样式可支持撤销和重做操作:
// 创建设置样式动作并执行
var action = ReoGrid.SetRangeStyleAction(range, style);
grid.DoAction(action);
获取样式的方式包括:
// 获取区域样式
var style = sheet1.GetRangeStyle(range);
// 获取单元格样式
var cellStyle = sheet1.GetCellStyle(pos);
// 获取单元格背景色
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 区域设置天蓝色背景:
// 为 B1:E5 区域设置天蓝色背景
sheet1.SetRangeStyles("B1:E5", ReoGrid.WorksheetRangeStyle(
BackColor = ReoGrid.Graphics.SolidColor.SkyBlue
) );
注意必须设置 Flag 属性以指定要应用的样式类型。
为整个表格设置背景图案:
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();
设置文字为红色:
sheet1.SetRangeStyles("B1:E5", ReoGrid.WorksheetRangeStyle(
TextColor = ReoGrid.Graphics.SolidColor.Red
) );
文本可以设置水平和垂直两个方向的对齐方式。
设置水平居中对齐:
sheet1.SetRangeStyles("A1:E5", ReoGrid.WorksheetRangeStyle(
HAlign = ReoGrid.ReoGridHorAlign.Center
) );
设置文本自动换行(默认为不换行):
sheet1.SetRangeStyles("A1:E5", ReoGrid.WorksheetRangeStyle(
TextWrapMode = ReoGrid.TextWrapMode.WordBreak
) );
通过设置旋转角度来旋转单元格内文本:
var cell = sheet1.Cells["A1"];
cell.Data = "Hello World";
cell.Style.RotateAngle = 90; // 旋转90度
修改字体名称和大小:
sheet1.SetRangeStyles("A1:E5", ReoGrid.WorksheetRangeStyle(
FontName = "Segoe UI",
FontSize = 20
) );
设置各种字体样式的完整程序示例:
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 来移除特定样式:
// 移除指定区域的所有背景样式
sheet1.RemoveRangeStyles(ReoGrid.RangePosition(2, 2, 3, 3), ReoGrid.PlainStyleFlag.BackAll);
通过动作移除样式:
// 创建移除样式动作并执行
var action = ReoGrid.Actions.RemoveRangeStyleAction(
ReoGrid.RangePosition(2, 2, 3, 3),
ReoGrid.PlainStyleFlag.BackAll
);
grid.DoAction(action);
namespace unvell.ReoGrid;
下面附上 ReoGrid.PlainStyleFlag 定义的 C# 源代码供参考
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
}