# dotNet.ReoGrid 扩展库 - 在 aardio 中使用

ReoGrid 完全可以在 aardio 中使用，因为它是由 C#.NET 开发的，而 aardio 可以通过 dotNet 扩展库无缝调用 .NET 组件。

## [使用 Excel 制作电子表格模板](#make-spreadsheet-template-by-excel)

ReoGrid 支持加载和保存 Excel(.xlsx) 文件。您可以使用 Excel 制作任何电子表格模板，然后在 aardio 应用程序中通过 ReoGrid 显示它们。详见 [Excel 文件格式](../io/excel-file-format/ "Excel 文件格式 (xlsx.html)")。

aardio 示例代码：
```aardio
import dotNet.ReoGrid;
var grid = ReoGrid.ReoGridControl(winform);
grid.Load("C:\mypath\template.xlsx"); // 加载 Excel 文件
```

## [使用 ReoGridEditor 制作电子表格模板](#make-spreadsheet-template-by-reogrideditor)

参考文档：[最佳实践 - 创建电子表格模板](../how-to/recommended-practice-for-using-reogrid) 

## [在窗体上放置 ReoGrid 控件](#put-reogrid-on-windows-form)

在 aardio 窗体程序内创建 ReoGrid 控件的代码：

```aardio
import win.ui;
var winform = win.form(text="ReoGrid 示例")

import dotNet.ReoGrid;
var grid = ReoGrid.ReoGridControl(winform); // 创建 ReoGrid 控件
grid.Dock = 5/*_DockStyle.Fill*/; // 填充整个窗体

// 获取默认工作表实例
var sheet1 = grid.CurrentWorksheet;
// 设置单元格值
sheet1["A1"] = "A";

winform.show();
win.loopMessage();
```

## [加载模板电子表格](#load-template-spreadsheet)

自文件加载 **Excel 格式**模板：

```aardio
// 从文件加载，支持 aardio 工程的内嵌资源文件路径
grid.Load("\res\template.xlsx");
```

aardio 新版 dotNet.ReoGrid 扩展库 `grid.Load` 方法的第一个文件参数已经支持文件路径、资源文件路径、buffer 类型的内存数据。

也可以自行创建文件流并加载文件流，示例：

```aardio
import System.IO;
var stream = System.IO.FileStream("\template.xlsx", 
    System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);

grid.Load(stream, 30/*FileFormat.Excel2007*/);
stream.Close();
```

自内存文件流加载文件：

```aardio
//创建内存文件流
var memoryStream = System.IO.MemoryStream();

//加载资源文件
var bytes = string.loadBuffer("/res/template.xlsx")
 
//调用 .NET 函数，写入二进制数据
memoryStream.Write(bytes, 0, #bytes);

//重置流的位置到开头
memoryStream.Seek(0, System.IO.SeekOrigin.Begin);

grid.Load(memoryStream, 30/*FileFormat.Excel2007*/);

memoryStream.Close();
```

如果 grid.Load 方法的第一个参数指定文件流对象，则第二个参数必须要指定格式。可选格式如下：

- `1/*FileFormat.ReoGridFormat*/`
- `10/*FileFormat.CSV*/`
- `30/*FileFormat.Excel2007*/`
- `0/*FileFormat._Auto*/`
- `100/*FileFormat._Custom*/`

ardio 的 dotNet.ReoGrid 扩展库已经自动支持自内存加载，只要在 `grid.Load` 方法的第一个文件参数直接指定 buffer 类型的内存数据就可以，也可以指定 aardio 工程里的内嵌资源文件路径( aardio 会尝试自资源路径的后缀名获取默认的 format 参数值 )。
 
加载文件后窗体显示效果如下：
![175](../images/175.png)

## [隐藏工作表标签控件和滚动条](#hide-sheet-tab-control-and-scroll-bars)

ReoGrid 有 WorkbookSettings 和 WorksheetSettings，用于决定电子表格的许多行为和外观。工作表标签控件和滚动条是工作簿外观的一部分，可以通过以下设置隐藏：

```aardio
// 隐藏工作表标签和滚动条
grid.SetSettings(
    0x00000001/*WorkbookSettings.View_ShowSheetTabControl*/ | 
    0x00000002/*WorkbookSettings.View_ShowScrolls*/, 
    false
);
```

## [隐藏电子表格表头](#hide-spreadsheet-headers)

行标题和列标题是每个工作表的一部分，要隐藏当前选定工作表的标题，请使用以下代码：

```aardio
// 隐藏行和列标题
grid.CurrentWorksheet.SetSettings(
    0x00000001/*WorksheetSettings.View_ShowHeaders*/, 
    false
);
```

窗体显示效果如下：
![176](../images/176.png)

## 性能优化

aardio 调用 .NET 的速度虽然已经很快，但跨语言交互总是有成本的，所以要避免密集地、不必要地、大量循环访问控件，可以改为在 aardio 中循环生成数据以后，一次性读写控件。请参考： [dotNet.ReoGrid 性能优化](../more/performance.html)