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 },
});

属性

属性类型说明
Rowsint部分网格的行数
Columnsint部分网格的列数

从工作表中提取

使用 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 枚举控制复制部分网格的哪些元素。

单个标志

十六进制说明
CellData0x1单元格数据值
CellFormula0x2单元格公式
CellFormat0x4数据格式设置
CellStyle0x8单元格样式
HBorder0x10水平边框
VBorder0x20垂直边框

组合标志

组合说明
CellPropertiesCellData | CellFormula | CellFormat | CellStyle所有单元格属性
BordersHBorder | VBorder所有边框
AllCellProperties | 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);

相关主题

这篇文章对您有帮助吗?