概述
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 通过 StartPoint 和 EndPoint 定位。可以在任一端添加箭头端点。
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 参考
通用属性(所有形状)
| 属性 | 类型 | 说明 |
|---|---|---|
Location | Graphics.Point | 工作表上的左上角位置 |
Size | Graphics.Size | 宽度和高度 |
Bounds | Graphics.Rectangle | 位置和大小的组合 |
X, Y | RGFloat | 单独坐标 |
Width, Height | RGFloat | 单独尺寸 |
RotateAngle | RGFloat | 旋转角度(度,0 = 不旋转) |
Visible | bool | 形状是否可见 |
Style | IDrawingObjectStyle | 填充、线条和文本的样式对象 |
ShapeObject 属性(Rectangle、Ellipse、Diamond 等)
| 属性 | 类型 | 说明 |
|---|---|---|
Text | string | 形状内显示的文本 |
Style.TextColor | SolidColor | 文本颜色 |
Style.HorizontalAlignment | HorizontalAlignment | 水平文本对齐方式 |
Style.VerticalAlignment | VerticalAlignment | 垂直文本对齐方式 |
RoundedRectangleShape
| 属性 | 类型 | 说明 |
|---|---|---|
RoundRate | RGFloat | 圆角程度(0.0 = 直角,1.0 = 完全圆形) |
PieShape
| 属性 | 类型 | 说明 |
|---|---|---|
StartAngle | RGFloat | 起始角度(度) |
SweepAngle | RGFloat | 扫描角度(度) |
BlockArcShape
| 属性 | 类型 | 说明 |
|---|---|---|
StartAngle | RGFloat | 起始角度(度) |
SweepAngle | RGFloat | 扫描角度(度) |
ArcWidth | RGFloat | 弧形厚度 |
Line
| 属性 | 类型 | 说明 |
|---|---|---|
StartPoint | Graphics.Point | 线条起始位置 |
EndPoint | Graphics.Point | 线条结束位置 |
Style.StartCap | LineCapStyles | 起始点的端点样式 |
Style.EndCap | LineCapStyles | 结束点的端点样式 |
Style.LineWidth | RGFloat | 线条宽度 |
Style.LineColor | SolidColor | 线条颜色 |
IDrawingObjectStyle 属性(通过 shape.Style)
| 属性 | 类型 | 说明 |
|---|---|---|
FillColor | IColor | 背景填充颜色 |
LineColor | SolidColor | 轮廓颜色 |
LineWidth | RGFloat | 轮廓宽度 |
LineStyle | LineStyles | 轮廓样式(Solid、Dash、Dot 等) |