RGF 文件是一种存储 ReoGrid 工作表数据的文件格式,包括样式边框公式和其他电子表格信息。RGF 文件可以由 ReoGrid 和 ReoGridEditor 保存。

RGF 文件格式基于 XML,描述了 ReoGrid 组件中的电子表格。要将电子表格保存为 RGF 文件,使用工作表实例的 SaveRGF 方法:

worksheet.SaveRGF(path or stream);

要从 RGF 文件加载电子表格,使用工作表实例的 LoadRGF 方法:

worksheet.LoadRGF(path or stream);

RGF 文件快照

以下是 RGF 文件内容的示例片段:

<?xml version="1.0"?>
<grid xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <head>
    <meta>
      <culture>en-US</culture>
      <editor>ReoGrid Core </editor>
      <core-ver>0.8.9.2</core-ver>
    </meta>
    <print-settings>
      <paper-size>A4</paper-size>
      ...
    </print-settings>
  </head>
  <style color="#000000" font="Arial" font-size="9.75" bold="true" align="left" valign="middle" />
  <rows>
    <row row="0" height="11" auto-height="false" />
    ...
  </rows>
  <cols>
    <col col="0" width="10" auto-width="false" />
    ...
  </cols>
  <v-borders>
    <v-border row="23" col="3" color="#000000" style="Solid" pos="left" rows="8" />
    ...
  </v-borders>
  <h-borders>
    <h-border row="3" col="1" color="#000000" style="BoldSolid" pos="top" cols="14" />
    ...
  </h-borders>
  <cells>
    <cell row="1" col="1" colspan="14" format="text">Project Cost Summary
      <style bgcolor="#00007d" color="#ffffff" font-size="20.25" align="center" />
    </cell>
    ...
  </cells>
</grid>

RGF 文件 XML 结构

根元素

<grid>
  ...
</grid>

head 元素

head 元素存储基本信息,如单元格数量、视图设置、打印设置等。

meta 元素

meta 元素存储工作表的元数据,如区域信息和 ReoGrid 版本。例如:

<meta>
  <culture>en-US</culture>
  <editor>ReoGrid Core</editor>
  <core-ver>0.8.9.2</core-ver>
</meta>

rows 和 cols 元素

rowscols 元素存储工作表中的最大行数和列数。例如:

<rows>100</rows>
<cols>50</cols>

print-settings 元素存储当前工作表的打印和打印机设置。例如:

<print-settings>
  <page-break-rows>0,42</page-break-rows>
  <page-break-cols>1,15</page-break-cols>
  <scale-factor>0.8637016</scale-factor>
  <paper-size>A4</paper-size>
  <landscape>true</landscape>
  <page-order>down-over</page-order>
</print-settings>

settings 元素

settings 元素存储工作表设置,如是否显示网格线或分页线。例如:

<settings meta="2087944062">
  <show-page-break>true</show-page-break>
</settings>

style 元素

style 元素存储单元格、行和列的样式信息。例如:

<style color="#000000" font="Arial" font-size="9.75" bold="true" align="left" valign="middle" />

row 元素

row 元素存储行标题信息,如行高和标题。例如:

<row row="0" height="11" auto-height="false" />

column 元素

column 元素存储列标题信息,如列宽和标题。例如:

<col col="0" width="10" auto-width="false" />

h-border 和 v-border 元素

h-borderv-border 元素存储电子表格的边框信息。例如:

<v-border row="24" col="4" color="#000000" style="Dotted" pos="all" rows="7" />

cell 元素

cell 元素存储单元格信息,如单元格数据、单元格样式和数据格式。例如:

<cell row="1" col="1" colspan="14" format="text">
  <style bgcolor="#00007d" color="#ffffff" font-size="20.25" align="center" />
  Project Cost Summary
</cell>

保存图片

当添加 CellTypes.ImageCell 实例以在单元格中显示图片时,图片也会保存在 RGF 文件中并从中加载。图片以 base64 编码字符串的形式存储。

<cell row="0" col="0" body-type="ImageCell">image/png,iVBORw0KGgoAAAANSUhEUgA...M1P+eGgAAAABJRU5ErkJggg==</cell>

保存和加载

单个工作表

从工作表实例调用方法来保存或加载单个工作表:

// 保存
worksheet.SaveRGF(file or stream);
// 加载
worksheet.LoadRGF(file or stream);

多个工作表或整个工作簿

当前版本的 ReoGrid 不支持将整个工作簿保存和加载为单个 RGF 文件。应用程序应逐个保存和加载每个工作表。

以下是从工作簿保存和加载一组工作表的实践模式:

保存多个工作表

var savingList = new List<string>();

foreach (var worksheet in reoGridControl.Worksheets)
{
  if (_ShouldSaveThisWorksheet_(worksheet) == true)
  {
    // 保存
    worksheet.SaveRGF(string.Format("C:\\MyPath\\{0}.rgf", worksheet.Name));

    // 将工作表名称添加到保存列表
    savingList.Add(worksheet.Name);
  }
}

加载多个工作表

foreach(var sheetName in savingList)
{
  // 使用给定名称创建工作表实例
  var worksheet = reoGridControl.CreateWorksheet(sheetName);

  // 从流加载工作表
  worksheet.LoadRGF(string.Format("C:\\MyPath\\{0}.rgf", sheetName));
}

目标:通用流

using(var ms = new MemoryStream())
{
  // 保存
  worksheet.SaveRGF(ms);
  // 加载
  worksheet.LoadRGF(ms);
}

目标:文件

// 保存
worksheet.SaveRGF("C:\\MyPath\\MyFile.rgf");
// 加载
worksheet.LoadRGF("C:\\MyPath\\MyFile.rgf");

目标:字节数组

byte[] buf = null;

// 保存
using (var ms = new MemoryStream())
{
  worksheet.SaveRGF(ms);
  buf = ms.ToArray();
}

// 加载
using (var ms = new MemoryStream(buf))
{
  worksheet.LoadRGF(ms);
}

### 目标:字符串

string content = null;

// 保存
using (var ms = new System.IO.MemoryStream())
{
  sheet.SaveRGF(ms);
  content = Encoding.Default.GetString(ms.ToArray());
}

// 加载
using (var ms = new System.IO.MemoryStream(Encoding.Default.GetBytes(content)))
{
  sheet.LoadRGF(ms);
}

与 Excel 文件格式的区别

将工作表保存为 ReoGrid 格式与 Excel 格式之间存在一些差异。详情请参阅 Excel 和 RGF 格式的区别

这篇文章对您有帮助吗?