创建内存工作簿是一种可行的方案,在需要从 Excel 文件加载、编辑工作表内容,然后将结果保存为新的 Excel 文件时特别有用。与传统的创建屏幕控件方式不同,内存工作簿无需屏幕控件实例运行,缺少视口控制器以及鼠标和键盘控制器等界面模块。这使得它比基于屏幕控件的实现方式明显更快、更轻量。

342 图:从浏览器上传 Excel 或 CSV 文件并将数据处理到数据库中。

343 图:在 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

    • 创建和添加工作表的方法:CreateWorksheetAddWorksheet
    • 插入和移除工作表的方法:InsertWorksheetRemoveWorksheet
    • 复制和移动工作表的方法:CopyWorksheetMoveWorksheet
    • 获取工作表的方法:GetWorksheetByNameGetWorksheetIndex
  • Worksheets 集合

    • 访问工作簿中的工作表集合
  • 加载和保存操作

    • 能够加载和保存模板 Excel 文件或 RGF 文件
  • 工作簿事件

    • 访问所有与工作簿相关的事件
  • 内部操作异常通知

    • 内部操作期间发生的异常通知

不可用 API

由于内存工作簿的性质,某些 API 不受支持:

  • CurrentWorksheet 属性
    • 由于内存工作簿没有用于切换多个工作表的工作表标签,“当前激活的工作表”的概念不适用。应通过工作簿对象的 Worksheets 集合属性来访问工作表。
  • 滚动方法和事件
    • 内存工作簿不包含滚动条组件。
  • 外观样式
    • 内存工作簿没有可用的外观样式。
  • UI 相关方法
    • 与文本、图形和其他 UI 元素相关的方法不可用,因为内存工作簿不具有图形对象。这包括需要图形信息的 FitWidthToCellsFitHeightToCells 等方法。
  • 操作相关方法
    • 执行操作的方法如 DoActionUndoRedoRepeatLastAction 不可用。内存工作簿上的所有操作都是即时执行的,不可逆转。

在 Web 应用程序中使用内存工作簿

在 Web 应用程序中,ReoGrid 内存工作簿非常适合处理从 Web 客户端上传的电子表格数据或生成用于下载的 Excel 文件。

344

示例:创建和下载 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();
}
这篇文章对您有帮助吗?