# dotNet.ReoGrid 扩展库 - 折线图

要在工作表中添加折线图，首先需要准备数据源。

```aardio
// 获取当前工作表
var sheet1 = grid.CurrentWorksheet;

// 在工作表上准备数据源
sheet1["A2"] = [
    [ 2007, 2008, 2009, 2010, 2011, 2012 ],
    [ "城市1", 3, 2, 4, 2, 6 ],
    [ "城市2", 7, 5, 3, 6, 4 ],
    [ "城市3", 13, 10, 9, 10, 9 ],
    [ "总计", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)", "=SUM(E3:E5)", "=SUM(F3:F5)" ]
];
```

工作表上的数据源显示如下：

![233](../images/233.png)

定义数据系列范围、系列名称范围和类别名称范围：

```aardio
// 添加高亮区域: 数据范围、系列名称范围和类别名称范围
sheet1.AddHighlightRange("B2:F2");
sheet1.AddHighlightRange("A3:A6");
sheet1.AddHighlightRange("B3:F5");
```

添加折线图的完整代码：

```aardio
import win.ui;
/*DSG{{*/
var winform = win.form(text="ReoGrid 图表示例")
/*}}*/

import dotNet.ReoGrid;
var grid = ReoGrid.ReoGridControl(winform);
var sheet1 = grid.CurrentWorksheet;

// 获取当前工作表
var sheet1 = grid.CurrentWorksheet;
  
// 在工作表上准备数据源
sheet1["A2"] = [
    [ 2007, 2008, 2009, 2010, 2011, 2012 ],
    [ "城市1", 3, 2, 4, 2, 6 ],
    [ "城市2", 7, 5, 3, 6, 4 ],
    [ "城市3", 13, 10, 9, 10, 9 ],
    [ "总计", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)", "=SUM(E3:E5)", "=SUM(F3:F5)" ]
];

// 添加高亮区域: 数据范围、系列名称范围和类别名称范围
sheet1.AddHighlightRange("B2:F2");
sheet1.AddHighlightRange("A3:A6");
sheet1.AddHighlightRange("B3:F5");
 
// 创建折线图对象
var c1 = ReoGrid.Chart.LineChart();

c1.Location = grid.Point(220, 160);
c1.Size = grid.Size(400, 260);
c1.Title = "折线图示例";

// 指定数据源
// 数据源由系列数据和每个系列数据的名称创建
c1.DataSource = ReoGrid.Chart.WorksheetChartDataSource(sheet1,"A3:A6", "B3:F5" ) 
c1.DataSource.CategoryNameRange = ReoGrid.RangePosition("B2:F2");

// 将折线图实例添加到工作表中显示
sheet1.FloatingObjects.Add(c1);

winform.show();
win.loopMessage();
```

最终效果：

![224](../images/224.png)

## 代码说明

1. 在 aardio 中，二维数组可以直接赋值给工作表单元格范围
2. 使用 `Ranges["A1:B2"]` 这样的语法可以获取单元格范围对象
3. `AddHighlightRange` 方法可以高亮显示指定范围，方便查看数据区域
4. 创建图表时需要指定位置(Location)、大小(Size)和标题(Title)
5. 数据源通过 `WorksheetChartDataSource` 指定，需要传入工作表对象、系列名称范围和数据范围
6. 最后通过 `FloatingObjects.Add` 将图表添加到工作表

注意：在 aardio 中调用 .NET 对象时，属性赋值可以使用类似 JavaScript 的对象字面量语法，如 `{ CategoryNameRange = categoryNamesRange }`。