2013-11-21 36 views
0

我试图在Visual Studio 2008中为Microsoft Word 2007创建一个C#添加项。添加内容应该在富文本内容控件中创建一个表格,以便在稍后添加一个可以重新引用该表以编辑它。我已经成功地在内容控件中创建表并重新引用内容控件来更改表内容。不幸的是,这样做后,由于某种原因删除了内容控制,因此我无法再引用表格。编辑表格时删除了富文本内容控件

下面是创建该表和内容控制代码:

private String name = "Hello"; 

    private void btnTest1_Click(object sender, RibbonControlEventArgs e) 
    { 
     Microsoft.Office.Tools.Word.RichTextContentControl richTextControl1; 

     if (Globals.ThisAddIn.Application == null) 
      return; 

     Document vstoDoc = Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(); 
     object start = Globals.ThisAddIn.Application.Selection.Start; 
     object end = Globals.ThisAddIn.Application.Selection.End; 
     object Unknown = Type.Missing; 

     Word.Range thisrange = Globals.ThisAddIn.Application.ActiveDocument.Range(ref start, ref end); 
     Word.Table oTable = vstoDoc.Tables.Add(thisrange, 2, 2,ref Unknown, ref Unknown); 

     oTable.Select(); 
     richTextControl1 = vstoDoc.Controls.AddRichTextContentControl(name); 
     richTextControl1.Title = "Control " + name; 

     name += " again"; 
    } 

下面是引用内容的控制并最终将其删除代码:

private void btnTest2_Click(object sender, RibbonControlEventArgs e) 
    { 
     Microsoft.Office.Tools.Word.RichTextContentControl richTextControl1; 
     Word.Table oTable; 

     if (Globals.ThisAddIn.Application == null) 
      return; 

     Document vstoDoc = Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(); 
     object Unknown = Type.Missing; 

     Word.ContentControls controls = vstoDoc.SelectContentControlsByTitle("Control Hello"); 
     foreach (Word.ContentControl control in controls) 
     { 
      oTable = control.Range.Tables[1]; 
      oTable.Cell(1,1).Range.Text = "Testing"; 
     } 

有没有人有一个解决方案对这个问题?

+0

我发现1,也许2,可能的解决办法。第一种方法是在每次编辑时在表格周围创建一个新的内容控件,并使用新的唯一名称为其指定相同的标题。另一个解决方法是不使用内容控件并按索引跟踪表。这将需要一些自定义侦听器在没有添加的情况下创建新表时触发事件,并且在其他方​​面也会非常敏感。这些解决方法都不如我希望的那样好。 – Chris

+0

如何在oTable.Range创建书签并使用其名称来定位表(在VBA中,您可以使用书签名称作为书签集合的索引,但在C#中,可能需要迭代集合才能找到它) 。 OTOH您可能会遇到与删除书签相似的问题。 – 2013-11-22 16:24:03

回答

0

我认为你需要将控件的LockContentControl属性设置为true,或者C#中需要的任何东西。

+0

不幸的是,这不起作用,当我尝试编辑表格时,它会引发异常,并说该控件受到保护。我试着手工编辑表格的内容,并没有问题,所以我假设错误被抛出,因为它试图再次删除内容控制。 – Chris