概述

ReoGrid 支持在工作表上直接添加绘图形状——矩形、椭圆、线条、菱形、圆角矩形、扇形等。形状通过 worksheet.FloatingObjects 集合管理,属于 unvell.ReoGrid.Drawing.Shapes 命名空间。

using unvell.ReoGrid.Drawing;
using unvell.ReoGrid.Drawing.Shapes;

向工作表添加形状

创建形状实例,配置其位置和大小,然后添加到 FloatingObjects

var worksheet = grid.CurrentWorksheet;

var rect = new RectangleShape()
{
    Location = new Graphics.Point(60, 90),
    Size = new Graphics.Size(160, 80),
    Text = "Hello ReoGrid",
};

worksheet.FloatingObjects.Add(rect);

所有形状共享从 DrawingObject 继承的 Location / Size / Bounds 定位 API。

可用的形状类型

矩形

var rect = new RectangleShape()
{
    Location = new Graphics.Point(60, 90),
    Size = new Graphics.Size(160, 80),
};
worksheet.FloatingObjects.Add(rect);

椭圆

var ellipse = new EllipseShape()
{
    Location = new Graphics.Point(60, 90),
    Size = new Graphics.Size(120, 80),
};
worksheet.FloatingObjects.Add(ellipse);

菱形

var diamond = new DiamondShape()
{
    Location = new Graphics.Point(60, 90),
    Size = new Graphics.Size(120, 80),
};
worksheet.FloatingObjects.Add(diamond);

圆角矩形

使用 RoundRate(0.0 - 1.0)控制相对于短边的圆角半径。

var rounded = new RoundedRectangleShape()
{
    Location = new Graphics.Point(60, 90),
    Size = new Graphics.Size(160, 80),
    RoundRate = 0.3f,
};
worksheet.FloatingObjects.Add(rounded);

扇形

var pie = new PieShape()
{
    Location = new Graphics.Point(60, 90),
    Size = new Graphics.Size(120, 120),
    StartAngle = 0f,
    SweepAngle = 270f,
};
worksheet.FloatingObjects.Add(pie);

块状弧形

var arc = new BlockArcShape()
{
    Location = new Graphics.Point(60, 90),
    Size = new Graphics.Size(120, 120),
    StartAngle = -90f,
    SweepAngle = 180f,
    ArcWidth = 20f,
};
worksheet.FloatingObjects.Add(arc);

线条

Line 通过 StartPointEndPoint 定位。可以在任一端添加箭头端点。

var line = new Line()
{
    StartPoint = new Graphics.Point(60, 130),
    EndPoint = new Graphics.Point(220, 130),
};

line.Style.LineWidth = 1.5f;
line.Style.EndCap = Graphics.LineCapStyles.Arrow;

worksheet.FloatingObjects.Add(line);

设置文本

所有从 ShapeObject 派生的形状(Rectangle、Ellipse、Diamond 等)都支持 Text 属性。

rect.Text = "My Label";

样式

通过任何形状的 Style 属性自定义其外观。

填充颜色

rect.Style.FillColor = Graphics.SolidColor.LightYellow;

线条颜色和宽度

rect.Style.LineColor = Graphics.SolidColor.Navy;
rect.Style.LineWidth = 2.0f;

线条样式

rect.Style.LineStyle = Graphics.LineStyles.Dash;

可用的 LineStyles 值:

说明
Solid实线(默认)
Dash虚线
Dot点线
DashDot点划线
DashDotDot双点划线

文本颜色和对齐方式

rect.Style.TextColor = Graphics.SolidColor.DarkBlue;
rect.Style.HorizontalAlignment = Drawing.HorizontalAlignment.Center;
rect.Style.VerticalAlignment = Drawing.VerticalAlignment.Middle;

线条端点样式(用于 Line 形状)

line.Style.StartCap = Graphics.LineCapStyles.Ellipse;
line.Style.EndCap   = Graphics.LineCapStyles.Arrow;

可用的 LineCapStyles 值:

说明
None无端点(默认)
Arrow箭头
Ellipse椭圆端点
Round圆形端点

旋转

使用 RotateAngle(度)围绕形状的中心点旋转。

rect.RotateAngle = 45f;

完整样式示例

var rect = new RectangleShape()
{
    Location = new Graphics.Point(120, 90),
    Size = new Graphics.Size(160, 100),
    Text = "Styled Shape",
};

rect.Style.FillColor  = Graphics.SolidColor.LightGoldenrodYellow;
rect.Style.LineColor  = Graphics.SolidColor.LimeGreen;
rect.Style.LineWidth  = 3f;
rect.RotateAngle = 15f;

worksheet.FloatingObjects.Add(rect);

管理形状

// 移除特定形状
worksheet.FloatingObjects.Remove(rect);

// 移除所有形状
worksheet.FloatingObjects.Clear();

// 遍历所有形状
foreach (var obj in worksheet.FloatingObjects)
{
    Console.WriteLine(obj.Bounds);
}

// 计数形状
int count = worksheet.FloatingObjects.Count;

API 参考

通用属性(所有形状)

属性类型说明
LocationGraphics.Point工作表上的左上角位置
SizeGraphics.Size宽度和高度
BoundsGraphics.Rectangle位置和大小的组合
X, YRGFloat单独坐标
Width, HeightRGFloat单独尺寸
RotateAngleRGFloat旋转角度(度,0 = 不旋转)
Visiblebool形状是否可见
StyleIDrawingObjectStyle填充、线条和文本的样式对象

ShapeObject 属性(Rectangle、Ellipse、Diamond 等)

属性类型说明
Textstring形状内显示的文本
Style.TextColorSolidColor文本颜色
Style.HorizontalAlignmentHorizontalAlignment水平文本对齐方式
Style.VerticalAlignmentVerticalAlignment垂直文本对齐方式

RoundedRectangleShape

属性类型说明
RoundRateRGFloat圆角程度(0.0 = 直角,1.0 = 完全圆形)

PieShape

属性类型说明
StartAngleRGFloat起始角度(度)
SweepAngleRGFloat扫描角度(度)

BlockArcShape

属性类型说明
StartAngleRGFloat起始角度(度)
SweepAngleRGFloat扫描角度(度)
ArcWidthRGFloat弧形厚度

Line

属性类型说明
StartPointGraphics.Point线条起始位置
EndPointGraphics.Point线条结束位置
Style.StartCapLineCapStyles起始点的端点样式
Style.EndCapLineCapStyles结束点的端点样式
Style.LineWidthRGFloat线条宽度
Style.LineColorSolidColor线条颜色

IDrawingObjectStyle 属性(通过 shape.Style

属性类型说明
FillColorIColor背景填充颜色
LineColorSolidColor轮廓颜色
LineWidthRGFloat轮廓宽度
LineStyleLineStyles轮廓样式(Solid、Dash、Dot 等)
这篇文章对您有帮助吗?