aardio 文档

dotNet.ReoGrid 扩展库 - 样式设置

创建并使用 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
}

Markdown 格式