创建内存工作簿是一种可行的方案,在需要从 Excel 文件加载、编辑工作表内容,然后将结果保存为新的 Excel 文件时特别有用。与传统的创建屏幕控件方式不同,内存工作簿无需屏幕控件实例运行,缺少视口控制器以及鼠标和键盘控制器等界面模块。这使得它比基于屏幕控件的实现方式明显更快、更轻量。
图:从浏览器上传 Excel 或 CSV 文件并将数据处理到数据库中。
图:在 ASP.NET Form 页面上下载生成的 Excel 或 CSV 文件。
要初始化内存工作簿,使用以下语法:
var workbook = ReoGridControl.CreateMemoryWorkbook();
要将工作簿保存为 Excel 文件到下载流,使用:
workbook.Save(Response.OutputStream, unvell.ReoGrid.IO.FileFormat.Excel2007);
要将 Excel 文件加载到内存工作簿,使用以下代码片段:
workbook.Load(@"C:\MyTemplate.xlsx", FileFormat.Excel2007);
可用 API
加载和保存 Excel 文件的 API,以及所有访问工作表中数据和样式的方法,与屏幕组件中使用的保持一致。
-
工作表管理 API
- 创建和添加工作表的方法:
CreateWorksheet、AddWorksheet - 插入和移除工作表的方法:
InsertWorksheet、RemoveWorksheet - 复制和移动工作表的方法:
CopyWorksheet、MoveWorksheet - 获取工作表的方法:
GetWorksheetByName、GetWorksheetIndex
- 创建和添加工作表的方法:
-
Worksheets集合- 访问工作簿中的工作表集合
-
加载和保存操作
- 能够加载和保存模板 Excel 文件或 RGF 文件
-
工作簿事件
- 访问所有与工作簿相关的事件
-
内部操作异常通知
- 内部操作期间发生的异常通知
不可用 API
由于内存工作簿的性质,某些 API 不受支持:
CurrentWorksheet属性- 由于内存工作簿没有用于切换多个工作表的工作表标签,“当前激活的工作表”的概念不适用。应通过工作簿对象的
Worksheets集合属性来访问工作表。
- 由于内存工作簿没有用于切换多个工作表的工作表标签,“当前激活的工作表”的概念不适用。应通过工作簿对象的
- 滚动方法和事件
- 内存工作簿不包含滚动条组件。
- 外观样式
- 内存工作簿没有可用的外观样式。
- UI 相关方法
- 与文本、图形和其他 UI 元素相关的方法不可用,因为内存工作簿不具有图形对象。这包括需要图形信息的
FitWidthToCells和FitHeightToCells等方法。
- 与文本、图形和其他 UI 元素相关的方法不可用,因为内存工作簿不具有图形对象。这包括需要图形信息的
- 操作相关方法
- 执行操作的方法如
DoAction、Undo、Redo和RepeatLastAction不可用。内存工作簿上的所有操作都是即时执行的,不可逆转。
- 执行操作的方法如
在 Web 应用程序中使用内存工作簿
在 Web 应用程序中,ReoGrid 内存工作簿非常适合处理从 Web 客户端上传的电子表格数据或生成用于下载的 Excel 文件。

示例:创建和下载 Excel 文件
在 ASP.NET 应用程序中,以下代码片段可以在页面类中实现,用于生成 Excel 文件并提示用户下载:
protected void Page_Load(object sender, EventArgs e)
{
// 创建内存工作簿实例
var grid = ReoGridControl.CreateMemoryWorkbook();
// 默认访问第一个工作表(新工作簿包含一个空工作表)
var sheet1 = grid.Worksheets[0];
// 在单元格 A1 中填入文本
sheet1["A1"] = "Hello World";
// 在单元格 A2 到 E2 中填入数据和公式
sheet1["A2"] = new object[] {
10, // A2
20, // B2
"=A2+B2", // C2
"=SUM(A2:C2)", // D2
};
// 准备文件下载的响应
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=SampleData.xlsx");
// 将工作簿以 Excel 2007 格式保存到响应流
grid.Save(Response.OutputStream, unvell.ReoGrid.IO.FileFormat.Excel2007);
// 刷新响应流并结束响应
Response.Flush();
Response.End();
}