正常获取合并单元格通常是获取 UsedRange然后foreach每一个range来判断是否是合并单元格,但是这种方法对于EXCEL中包含大量数据的情况下,
效率非常低。经研究发现可以使用如下方法来获取合并单元格,性能大幅度提升。
这里使用VBA代码演示,VSTO用法基本相同。
1 Sub DetectMerged() 2 Dim rng1 As Range 3 Dim rng2 As Range 4 On Error Resume Next 5 Set rng1 = Intersect(Cells.SpecialCells(xlFormulas), Cells.SpecialCells(xlBlanks)) 6 Set rng2 = Intersect(Cells.SpecialCells(xlConstants), Cells.SpecialCells(xlBlanks)) 7 On Error GoTo 0 8 If Not rng1 Is Nothing Then MsgBox "Merged formulae cells in " & rng1.Address(0, 0) 9 If Not rng2 Is Nothing Then MsgBox "Merged constant cells in " & rng2.Address(0, 0) 10 End Sub
这里得到
rng1 和rng2 后 再使用foreach就可以。但是,也要判断一下是否是合并单元格。