aardio 文档

dotNet.ReoGrid 扩展库 - 合并与取消合并单元格

合并单元格

要合并单元格范围,可以使用以下两种方式之一:

// 获取当前活动工作表
var sheet1 = reoGridControl.CurrentWorksheet;

// 方式1:调用工作表的合并方法
sheet1.MergeRange("B3:E5");

// 方式2:通过范围实例合并
var range = sheet1.Ranges["B3:E5"];
range.Merge();

合并单元格示例

取消合并单元格

// 取消合并指定范围
sheet1.UnmergeRange("B3:E5");

// 或者通过范围实例取消合并
var range = sheet1.Ranges["B3:E5"];
range.Unmerge();

撤销与重做

合并与取消合并操作可以通过动作执行,这样允许撤销操作。

通过动作合并单元格

// 使用动作合并单元格范围
grid.DoAction(ReoGrid.MergeRangeAction("B3:E5"));

通过动作取消合并单元格

// 使用动作取消合并单元格范围
grid.DoAction(ReoGrid.UnmergeRangeAction("B3:E5"));

运行脚本

使用扩展版本时,可以执行脚本进行合并和取消合并操作:

var sheet1 = workbook.CurrentWorksheet;
sheet1.mergeRange(ReoGrid.Range("B3:E5"));  // 合并范围
sheet1.unmergeRange(ReoGrid.Range("B3:E5")); // 取消合并范围

示例:合并或取消合并当前选中的范围

var sheet1 = workbook.CurrentWorksheet;
sheet1.mergeRange(grid.selection);    // 合并选中范围
sheet1.unmergeRange(grid.selection);  // 取消合并选中范围

注意事项

UnmergeRange方法会查找并取消合并指定范围内的所有已合并单元格。例如,下图中如果传入红色范围作为参数,则已合并的单元格A、B和C都会被取消合并。

取消合并范围示例

合并单元格的特性

检查单元格是否合并

只有合并范围左上角的单元格才是合并单元格。除了左上角单元格外,合并到范围内的其他单元格都会变为无效。

合并单元格示意图

要检查单元格是否合并,使用工作表的IsMergedCell方法:

var isMergedCell = sheet1.IsMergedCell(2, 1);  // false
isMergedCell = sheet1.IsMergedCell(2, 2);     // true
isMergedCell = sheet1.IsMergedCell(2, 3);      // false

行跨度和列跨度

合并单元格有两个属性RowSpanColSpan,用于确定每个方向合并了多少个单元格:

行跨度和列跨度示意图

B3单元格是一个合并单元格,它的rowspan为4,colspan为3。

通过获取单元格实例可以获取更多信息,获取rowspancolspan

var rowspan = cell.GetRowspan();  // 行跨度数量
var colspan = cell.GetColspan();  // 列跨度数量

属性IsMergedCell用于检查单元格是否是合并单元格:

var cell = sheet1.Cells["B3"];
var isMergedCell = cell.IsMergedCell;  // true

从范围中查找合并单元格

ReoGrid提供了GetMergedCellOfRange方法,用于从指定范围中查找合并单元格。

查找合并单元格示意图

var outputCell = sheet1.GetMergedCellOfRange(inputRange);

有效与无效单元格

被其他单元格合并的单元格会变为无效,无效单元格不能显示数据和样式。下图中红色范围是一个合并单元格,除了第一个单元格外,标记为"No"的其他单元格都是无效单元格,它们不能被选中和编辑。

有效与无效单元格示意图

工作表有一个名为IsValidCell的方法,用于检查单元格是否有效。

sheet1.IsValidCell(2, 2);  // true
sheet1.IsValidCell(2, 3);  // false

检查完整合并单元格

有一个方法可以检查并获取完整的合并单元格,如果给定的是单元格的一部分。

检查完整合并单元格示意图

var outputRange = sheet1.CheckMergedRange(inputRange);

范围交叉异常

要合并的范围可能会与其他合并单元格交叉,尝试合并交叉范围会导致RangeIntersectionException

范围交叉异常示意图

用户代码应该处理这个异常并取消用户操作。

异常处理示意图

方法CheckIntersectedMergingRange用于检查指定范围内是否包含任何合并单元格的部分。这个方法可以避免上述异常。

var outputRange = sheet1.CheckIntersectedMergingRange(inputRange);

如果outputRange.IsEmpty为true,表示inputRange是安全的。还有另一个方法可以实现相同功能:

var hasIntersection = sheet1.HasIntersectedMergingRange(inputRange);

Markdown 格式