PartialGrid 表示一个分离的矩形单元格块 — 包括数据、样式和边框 — 可以从工作表中提取或应用到工作表中。它是剪贴板操作、SetPartialGridAction 和模式重复填充的底层机制。
命名空间
using unvell.ReoGrid;
创建 PartialGrid
构造函数
| 构造函数 | 说明 |
|---|---|
PartialGrid() | 创建一个空的部分网格 |
PartialGrid(int rows, int cols) | 创建具有指定容量的空部分网格 |
PartialGrid(object[,] data) | 从二维数组数据创建部分网格 |
// 从二维数组创建
var grid = new PartialGrid(new object[,] {
{ "Name", "Price", "Qty" },
{ "Apple", 1.20, 50 },
{ "Banana", 0.80, 30 },
});
属性
| 属性 | 类型 | 说明 |
|---|---|---|
Rows | int | 部分网格的行数 |
Columns | int | 部分网格的列数 |
从工作表中提取
使用 GetPartialGrid 从工作表中复制一块单元格。返回的 PartialGrid 包含数据、样式和边框。
GetPartialGrid 重载
| 签名 | 说明 |
|---|---|
GetPartialGrid(string addressOrName) | 通过地址或命名范围获取 |
GetPartialGrid(int row, int col, int rows, int cols) | 通过位置和大小获取 |
GetPartialGrid(RangePosition range) | 通过范围位置获取 |
GetPartialGrid(int[] columns, int[] rows) | 获取不连续的列和行 |
// 从 A1:C3 复制一块
PartialGrid block = sheet.GetPartialGrid("A1:C3");
// 通过位置复制
PartialGrid block = sheet.GetPartialGrid(0, 0, 3, 3);
// 复制特定的列和行(不连续)
PartialGrid block = sheet.GetPartialGrid(
new int[] { 0, 2, 4 }, // A、C、E 列
new int[] { 0, 1, 2 }); // 第 1、2、3 行
应用到工作表
使用 SetPartialGrid 将部分网格粘贴到工作表的目标位置。这将用部分网格的数据、样式和边框覆盖目标范围。
SetPartialGrid 重载
| 签名 | 返回值 | 说明 |
|---|---|---|
SetPartialGrid(string addressOrName, PartialGrid data) | RangePosition | 粘贴到地址或命名范围 |
SetPartialGrid(RangePosition toRange, PartialGrid data) | RangePosition | 粘贴到范围位置 |
// 从一个位置复制到另一个位置
var block = sheet.GetPartialGrid("A1:C3");
sheet.SetPartialGrid("E1", block);
返回的 RangePosition 是实际被填充的范围。
重复模式
使用 SetPartialGridRepeatly 将部分网格平铺到更大的范围中。部分网格会重复以填充目标范围。
SetPartialGridRepeatly 重载
| 签名 | 返回值 | 说明 |
|---|---|---|
SetPartialGridRepeatly(string addressOrName, PartialGrid grid, PartialGridCopyFlag flags) | RangePosition | 在地址处重复 |
SetPartialGridRepeatly(RangePosition range, PartialGrid grid, PartialGridCopyFlag flags) | RangePosition | 在范围处重复 |
// 创建一个 2 行的模式
var pattern = new PartialGrid(new object[,] {
{ "A", "B", "C" },
{ "D", "E", "F" },
});
// 将模式平铺到 10 行的范围
sheet.SetPartialGridRepeatly("A1:C10", pattern);
PartialGridCopyFlag
PartialGridCopyFlag 枚举控制复制部分网格的哪些元素。
单个标志
| 值 | 十六进制 | 说明 |
|---|---|---|
CellData | 0x1 | 单元格数据值 |
CellFormula | 0x2 | 单元格公式 |
CellFormat | 0x4 | 数据格式设置 |
CellStyle | 0x8 | 单元格样式 |
HBorder | 0x10 | 水平边框 |
VBorder | 0x20 | 垂直边框 |
组合标志
| 值 | 组合 | 说明 |
|---|---|---|
CellProperties | CellData | CellFormula | CellFormat | CellStyle | 所有单元格属性 |
Borders | HBorder | VBorder | 所有边框 |
All | CellProperties | Borders | 全部(默认) |
// 仅复制数据和公式(不含样式或边框)
sheet.SetPartialGridRepeatly("A1:C10", pattern,
PartialGridCopyFlag.CellData | PartialGridCopyFlag.CellFormula);
配合操作使用
SetPartialGridAction 为粘贴部分网格提供撤销/重做支持:
using unvell.ReoGrid.Actions;
var block = sheet.GetPartialGrid("A1:C3");
sheet.DoAction(new SetPartialGridAction(
new RangePosition("E1:G3"), block, PartialGridCopyFlag.All));
// 撤销粘贴
grid.Undo();
比较部分网格
bool isEqual = grid1.Equals(grid2, PartialGridCopyFlag.All);
bool dataOnly = grid1.Equals(grid2, PartialGridCopyFlag.CellData);
示例
复制和粘贴一个块
// 复制带样式的标题行
var header = sheet.GetPartialGrid("A1:F1");
// 粘贴到另一个工作表
var sheet2 = grid.Worksheets[1];
sheet2.SetPartialGrid("A1", header);
创建重复模板
// 定义一个带样式的模板行
var template = sheet.GetPartialGrid("A1:D2");
// 应用到 20 行
sheet.SetPartialGridRepeatly("A3:D22", template);
选择性复制
// 仅复制样式(不含数据)
sheet.SetPartialGridRepeatly("A1:D10", template,
PartialGridCopyFlag.CellStyle | PartialGridCopyFlag.Borders);