ReoGrid 支持多种图表类型,可以作为浮动对象显示在工作表上。图表在其数据源发生更改时会自动更新,并且会随 Excel 文件一起保存/加载。
命名空间
using unvell.ReoGrid.Chart;
using unvell.ReoGrid.Drawing;
可用的图表类型
| 类 | 示例 | 说明 |
|---|
ColumnChart |  | 垂直柱状图 |
BarChart |  | 水平条形图 |
LineChart |  | 折线图 |
AreaChart |  | 填充面积图 |
Pie2DChart |  | 2D 饼图 |
DoughnutChart |  | 环形图 |
创建图表
步骤 1:准备数据
var sheet = grid.CurrentWorksheet;
sheet["A2"] = new object[,] {
{ null, 2008, 2009, 2010, 2011, 2012 },
{ "City 1", 3, 2, 4, 2, 6 },
{ "City 2", 7, 5, 3, 6, 4 },
{ "City 3", 13, 10, 9, 10, 9 },
};
步骤 2:定义范围
var dataRange = sheet.Ranges["B3:F5"]; // 数值数据
var serialNamesRange = sheet.Ranges["A3:A5"]; // 系列名称(行标题)
var categoryNamesRange = sheet.Ranges["B2:F2"]; // 类别名称(列标题)
步骤 3:创建图表
var chart = new ColumnChart
{
Location = new Graphics.Point(220, 160),
Size = new Graphics.Size(400, 260),
Title = "Column Chart Sample",
DataSource = new WorksheetChartDataSource(sheet, serialNamesRange, dataRange)
{
CategoryNameRange = categoryNamesRange,
},
};
步骤 4:添加到工作表
sheet.FloatingObjects.Add(chart);
图表属性
所有图表类型都继承自 Chart 基类:
| 属性 | 类型 | 默认值 | 说明 |
|---|
Title | string | "Chart" | 图表标题文本 |
DataSource | WorksheetChartDataSource | null | 图表的数据源 |
ShowLegend | bool | true | 是否显示图例 |
PrimaryLegend | ChartLegend | — | 图表的图例实例 |
DataSerialStyles | DataSerialStyleCollection | — | 每个数据系列的样式 |
Location | Graphics.Point | — | 工作表上的左上角位置 |
Size | Graphics.Size | — | 宽度和高度 |
Bounds | Graphics.Rectangle | — | 位置和大小的组合 |
Visible | bool | true | 图表是否可见 |
事件
| 事件 | 说明 |
|---|
ChartDataChanged | 图表数据更新时触发 |
DataSourceChanged | 数据源更改时触发 |
数据源
WorksheetChartDataSource
将工作表数据连接到图表:
// 使用范围的构造函数
var dataSource = new WorksheetChartDataSource(sheet, serialNamesRange, dataRange)
{
CategoryNameRange = categoryNamesRange,
};
// 使用字符串地址的构造函数
var dataSource = new WorksheetChartDataSource(sheet, "A3:A5", "B3:F5")
{
CategoryNameRange = sheet.Ranges["B2:F2"],
};
构造函数
| 构造函数 | 说明 |
|---|
WorksheetChartDataSource(worksheet) | 空数据源 |
WorksheetChartDataSource(worksheet, serialNamesRange, dataRange) | 使用系列名称和数据范围 |
WorksheetChartDataSource(worksheet, serialNamesRange, dataRange, rowOrColumn) | 指定系列按行还是按列排列 |
属性
| 属性 | 类型 | 说明 |
|---|
Worksheet | Worksheet | 包含数据的工作表 |
CategoryNameRange | RangePosition | 包含类别标签的范围 |
SerialCount | int | 数据系列的数量(只读) |
CategoryCount | int | 类别的数量(只读) |
Serials | WorksheetChartDataSerialCollection | 数据系列集合 |
方法
| 方法 | 说明 |
|---|
GetCategoryName(int index) | 按索引获取类别标签 |
AddSerial(worksheet, labelAddress, dataRange) | 手动添加数据系列 |
GetSerial(int index) | 获取特定数据系列 |
事件
WorksheetChartDataSerial
表示图表中的一个数据系列:
| 属性 | 类型 | 说明 |
|---|
Worksheet | Worksheet | 包含数据的工作表 |
DataRange | RangePosition | 包含系列数据的范围 |
LabelAddress | CellPosition | 系列标签单元格的地址 |
Label | string | 系列名称(只读) |
Count | int | 数据点数量(只读) |
this[int index] | double? | 按索引获取数据值 |
数据系列样式
自定义每个数据系列的外观:
// 按索引访问样式
var style = chart.DataSerialStyles[0];
| 属性 | 类型 | 默认值 | 说明 |
|---|
FillColor | IColor | (自动) | 柱形、面积、饼图扇区的填充颜色 |
LineColor | SolidColor | (自动) | 折线图的线条颜色 |
LineWidth | RGFloat | 2f | 线条宽度 |
LineStyle | LineStyles | Solid | 线条样式(Solid、Dash、Dot 等) |
StartCap | LineCapStyles | None | 起始端点样式 |
EndCap | LineCapStyles | None | 结束端点样式 |
示例:半透明面积图
foreach (var style in chart.DataSerialStyles)
{
style.FillColor = new Graphics.SolidColor(100, style.FillColor.ToSolidColor());
}
图例
控制图表图例:
// 隐藏图例
chart.ShowLegend = false;
// 访问图例属性
var legend = chart.PrimaryLegend;
LegendPosition 枚举
| 值 | 说明 |
|---|
Right | 图例在右侧(默认) |
Bottom | 图例在底部 |
Left | 图例在左侧 |
Top | 图例在顶部 |
坐标轴配置(仅限坐标轴图表)
柱状图、条形图、折线图和面积图继承自 AxisChart,支持坐标轴配置:
| 属性 | 类型 | 说明 |
|---|
PrimaryAxisInfo | AxisDataInfo | 主坐标轴配置 |
SecondaryAxisInfo | AxisDataInfo | 次坐标轴配置 |
ShowHorizontalGuideLines | bool | 显示水平辅助线(默认:true) |
ShowVerticalGuideLines | bool | 显示垂直辅助线(默认:false) |
AxisDataInfo 属性
| 属性 | 类型 | 说明 |
|---|
Levels | int | 坐标轴级别数 |
Scaler | int | 坐标轴缩放器 |
Minimum | double | 坐标轴最小值 |
Maximum | double | 坐标轴最大值 |
AutoMinimum | bool | 自动确定最小值 |
AutoMaximum | bool | 自动确定最大值 |
LargeStride | double | 大步长值(主网格线) |
SmallStride | double | 小步长值(次网格线) |
高亮范围
在工作表上高亮显示数据范围,以直观地指示图表的数据源:
sheet.AddHighlightRange(dataRange);
sheet.AddHighlightRange(serialNamesRange);
sheet.AddHighlightRange(categoryNamesRange);
图表类型详情
类层次结构
FloatingObject
└─ DrawingObject
└─ DrawingComponent
└─ Chart (base)
├─ AxisChart
│ ├─ ColumnChart
│ │ └─ BarChart
│ ├─ LineChart
│ └─ AreaChart
└─ PieChart
├─ Pie2DChart
└─ DoughnutChart
相关主题