Cannot access individual rows in this collection because the table has vertically merged cells c#

本文介绍了在遇到表格中垂直合并单元格的情况时如何通过编程动态添加行的方法。具体包括拆分合并单元格后再添加行的步骤。

我们在处理表格的时候经常会遇到下面的问题。无论add还是delete Row都是不能直接操作的。经常报“Cannot access individual rows in this collection because the table has vertically merged cells. C#”  下面是我的一点总结。

------------------------------------------------------------

|    |  A  |     |
|  B  ---------------
|    |  C  |     |   

|--------------------
------------------------------------------------------------


上面是表格的大概样子,B是跨行的,A和C分别在两行上,我需要用程序动态的增加像B和C那样的行
doc.Tables[1].Rows.Add(ref beforRow);  这句代码只是对于很规则的表格。怎么办?

 

1.    doc.Tables[1].Cell(2, 3).Split(ref rownum, ref colnum);  // 先把合并的Cell 拆开成正常的。之后再用上面的语句。

2.    object beforRow = doc.Tables[1].Cell(2,3);                

doc.Tables[1].Rows.Add(ref beforRow);  


### 错误原因 报错 `cannot access individual rows in this collection because the table has vertically merged cells` 是因为在 Word 表格中存在垂直合并的单元格,而代码尝试直接访问这些合并单元格所在行,导致无法正确处理。当表格中有垂直合并单元格时,行的结构变得复杂,不能简单地像普通表格那样按行索引进行操作。 ### 解决方案 在访问表格行之前,需要检查表格是否存在垂直合并单元格,并对合并单元格进行特殊处理。以下是修改后的代码: ```vba Sub Modify5_63(wdDoc As Object, wb As Workbook, headlinelevel As String, title As String) Dim ws As Worksheet, para As Object, tbl As Object Set ws = wb.Sheets("To report 2") For Each para In wdDoc.Paragraphs If para.Style = headlinelevel And InStr(para.Range.Text, Trim(title)) > 0 Then With para.Range.Duplicate .Collapse wdCollapseStart .End = Application.Min(.End + 5000, wdDoc.Content.End) If.Tables.Count >= 1 Then ' 表格1操作 Set tbl =.Tables(1) ' 处理合并单元格,先拆分合并单元格 Dim cell As Object For Each cell In tbl.Range.Cells If cell.MergeCells Then cell.UnMerge End If Next cell Do While tbl.Rows.Count > 3 tbl.Rows(tbl.Rows.Count).Delete Loop Dim i As Integer For i = 19 To 29 If ws.Cells(i, 1).Value <> "" Then With tbl.Rows.Add .Cells(1).Range.Text = ws.Cells(i, 1).Value .Cells(2).Range.Text = ws.Cells(i, 2).Value End With End If Next i If tbl.Rows.Count >= 2 Then tbl.Rows(2).Delete End If End If End With Exit For End If Next wdDoc.Save End Sub ``` 在上述代码中,添加了对表格中合并单元格的处理,通过遍历表格的每个单元格,使用 `UnMerge` 方法将合并的单元格拆分,这样就可以正常访问表格的行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值