首页 > 解决方案 > 使用vsto如何判断word文档的表格中是否有合并单元格?

问题描述

有没有办法判断word文档的表格中是否有合并的单元格?

当我按照表格遍历word文档并更改表格和单元格属性时,我的程序出错,因为有些表格包含合并单元格,但是如果我按照单元格来遍历,由于文档内容可能很多,这需要很长时间,我知道excel中有一个属性MergeCells,但是如果没有这个属性的话......

 Range FR = wordDoc.Range(sRange.Start, sRange.End);
  for (int i = 1; i <= FR.Tables.Count; i++)
                    {
                        //Range IsMerge = FR.Tables[i].Range;
                        //if (IsMerge)
                        //{

                        //}


                        for (int j = 1; j <= FR.Tables[i].Rows.Count; j++)
                        {
                            Range rg = FR.Tables[i].Rows[j].Range;

                            object Replace_String = "^p";       
                            object ms = Type.Missing;
                            object Replace = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
                            object ReplaceWith = "";            
                            rg.Find.Execute(ref Replace_String, ref ms, ref ms, ref ms, ref ms,
                                ref ms, ref ms, ref ms, ref ms, ref ReplaceWith,
                                ref Replace, ref ms, ref ms, ref ms, ref ms);

                            rg.ParagraphFormat.FirstLineIndent = 0;
                            rg.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                        }
                    }

无法访问此集合中的各个行,因为该表具有垂直合并的单元格。

标签: c#.netms-wordvsto

解决方案


这是在 VBA 中检查 Word 表格中垂直或水平合并单元格的方法。您必须预测具体返回的错误代码,然后做出相应的反应。您可以将其转换为 C#。

Sub WorkWithTableData()
    Dim doc As Word.Document
    Dim i As Long, tblRow As Row, tblCol As Column
    Set doc = ActiveDocument
    On Error GoTo errHandler
    For i = 1 To doc.Tables.Count
        For Each tblRow In doc.Tables(i).rows
            'do something
        Next tblRow
NextStep:
        For Each tblCol In doc.Tables(i).Columns
            'do something
        Next tblCol
NextTable:
    Next i
    Exit Sub
errHandler:
    Select Case Err
        Case 5991
            MsgBox "Table #" & i & " has vertically merged cells"
            Resume NextStep
        Case 5992
            MsgBox "Table #" & i & " has horizontally merged cells"
            Resume NextTable
        Case Else
            MsgBox "Error " & Err.Number & ": " & _
                Err.Description & " in table #" & i
            Resume NextTable
    End Select
End Sub

推荐阅读