ReoGrid 中的范围由起始位置和大小定义。一个范围包含一个或多个单元格。范围可以相互交叉,范围与合并单元格不同(尽管范围可以被合并)。

Ranges

ReoGrid 通过两种主要类型表示范围:

  • RangePosition — 一个轻量级结构体,保存位置和大小信息。不绑定到任何工作表。
  • ReferenceRange — 一个绑定到特定工作表的类,提供对数据、样式和操作的直接访问。

RangePosition

RangePosition 结构体存储用于标识范围的数值信息:起始行、起始列、行数和列数。所有索引从零开始。

// 从地址字符串创建
var range = new RangePosition("C5:H14");

// 从行、列、行数、列数创建
var range = new RangePosition(4, 2, 10, 6);

// 从起始和结束位置创建
var range = new RangePosition(new CellPosition("C5"), new CellPosition("H14"));

// 从两个地址字符串创建
var range = new RangePosition("C5", "H14");

// 单个单元格
var range = new RangePosition(new CellPosition("A1"));

Range

属性

属性类型说明
Rowint起始行索引
Colint起始列索引
Rowsint行数
Colsint列数
EndRowint结束行索引
EndColint结束列索引
StartPosCellPosition起始位置
EndPosCellPosition结束位置
IsEmptybool行数或列数是否为零
IsEntirebool范围是否覆盖整行和整列
IsSingleCellbool范围是否只包含一个单元格

方法

方法返回值说明
Contains(CellPosition pos)bool检查单元格位置是否在范围内
Contains(int row, int col)bool检查行/列是否在范围内
Contains(RangePosition range)bool检查另一个范围是否完全包含在内
ContainsRow(int row)bool检查行是否在范围内
ContainsColumn(int col)bool检查列是否在范围内
IntersectWith(RangePosition range)bool检查两个范围是否重叠
Offset(int rows, int cols)RangePosition创建按行和列偏移的新范围
Offset(CellPosition pos)RangePosition创建按单元格位置偏移的新范围
ToAddress()string转换为地址字符串(例如 "A1:B10"
ToAbsoluteAddress()string转换为绝对地址(例如 "$A$1:$B$10"
ToRelativeAddress()string转换为相对地址
SetRows(int rows)void设置行数
SetCols(int cols)void设置列数

静态成员

成员说明
RangePosition.Empty空范围 (0, 0, 0, 0)
RangePosition.EntireRange整个工作表范围
RangePosition.IsValidAddress(string)检查字符串是否为有效的范围地址
RangePosition.Union(range1, range2)获取包含两个范围的最小范围
RangePosition.FromCellPosition(startRow, startCol, endRow, endCol)从单元格坐标创建

获取安全范围

当范围可能超出工作表边界时,使用 FixRange

var safeRange = sheet.FixRange(range);

ReferenceRange

ReferenceRange 绑定到特定工作表,提供对该范围的数据、样式、边框、格式和操作的直接访问。

获取 ReferenceRange

使用工作表上的 Ranges 集合:

var range = sheet.Ranges["B2:D3"];
var range = sheet.Ranges[1, 1, 2, 3];         // 行、列、行数、列数
var range = sheet.Ranges[new RangePosition(1, 1, 2, 3)];
var range = sheet.Ranges[new CellPosition("B2"), new CellPosition("D3")];

属性

位置

属性类型说明
PositionRangePosition工作表上的范围位置
WorksheetWorksheet父工作表
Rowint起始行索引
Columnint起始列索引
Rowsint行数
Colsint列数
EndRowint结束行索引
EndColumnint结束列索引
StartPosCellPosition起始位置
EndPosCellPosition结束位置

数据和内容

属性类型说明
Dataobject获取或设置整个范围的数据
CellsCellCollection范围内的单元格实例集合
// 设置范围数据
range.Data = new object[] { "Product", "Price", "Quantity" };

Set Range Data

样式

属性类型说明
StyleReferenceRangeStyle范围的样式访问
BorderRangeBorderProperty边框属性包装器
range.Style.BackColor = Color.LightBlue;
range.Style.Bold = true;

边框快捷方式

属性类型说明
BorderOutsideRangeBorderStyle外边框
BorderAllRangeBorderStyle所有边框(外边框 + 内边框)
BorderLeftRangeBorderStyle左边框
BorderTopRangeBorderStyle上边框
BorderRightRangeBorderStyle右边框
BorderBottomRangeBorderStyle下边框
BorderInsideAllRangeBorderStyle所有内边框
BorderInsideHorizontalRangeBorderStyle内部水平边框
BorderInsideVerticalRangeBorderStyle内部垂直边框
range.BorderOutside = RangeBorderStyle.BlackSolid;
range.Border.Outside = RangeBorderStyle.BlackSolid;  // 等效写法

数据格式

属性类型说明
DataFormatCellDataFormatFlag范围内所有单元格的数据格式类型
DataFormatArgsobject格式参数
CustomDataFormatterIDataFormatter自定义格式化器

保护

属性类型说明
IsReadonlybool将范围内所有单元格设为只读
IsLockedCellLock范围内所有单元格的锁定状态(仅设置)
IsMergedCellbool范围是否为单个合并单元格(只读)

验证

属性类型说明
ValidatorIValidator范围的输入验证规则

方法

方法说明
Select()在工作表上选择此范围
Merge()将范围合并为单个单元格
Unmerge()取消合并范围
GroupRows()对范围内的所有行分组
GroupColumns()对范围内的所有列分组
UngroupRows()取消范围内所有行的分组
UngroupColumns()取消范围内所有列的分组
Contains(CellPosition pos)检查单元格是否在范围内
Contains(RangePosition range)检查范围是否完全包含在内
Contains(ReferenceRange range)检查另一个引用范围是否包含在内
IntersectWith(RangePosition range)检查两个范围是否重叠
IntersectWith(ReferenceRange range)检查两个引用范围是否重叠
ToAddress()转换为地址字符串
ToAbsoluteAddress()转换为绝对地址字符串
IterateCells(iterator)遍历范围内的所有单元格

遍历单元格

var range = sheet.Ranges["A1:C3"];

range.IterateCells((row, col, cell) =>
{
    Console.WriteLine($"Cell [{row},{col}]: {cell?.Data}");
    return true;  // 继续遍历
});

类型之间的转换

// RangePosition → ReferenceRange
var refRange = sheet.Ranges[rangePosition];

// ReferenceRange → RangePosition
RangePosition pos = refRange.Position;

// 隐式转换(ReferenceRange 转 RangePosition)
RangePosition pos = refRange;

// 两者都可用于赋值
sheet.SelectionRange = rangePosition;
sheet.SelectionRange = refRange;

Selection Range

清除范围内容

使用 ClearRangeContent 有选择地清除范围中的元素:

// 仅清除数据
sheet.ClearRangeContent("A1:B5", CellElementFlag.Data);

// 仅清除公式
sheet.ClearRangeContent("A1:B5", CellElementFlag.Formula);

// 清除所有内容
sheet.ClearRangeContent("A1:B5", CellElementFlag.All);

CellElementFlag 枚举(标志)

说明
Data单元格数据值
Formula单元格公式
Body单元格主体(按钮、复选框等)
DataFormat数据格式设置
Style单元格样式
Border单元格边框
All以上所有

已使用范围

获取包含数据的范围:

RangePosition usedRange = sheet.UsedRange;

命名范围

命名范围是带有名称的特殊 ReferenceRange 实例。参见命名范围

相关主题

这篇文章对您有帮助吗?