VSTO Word加载项:如何在数组单元中添加内容控件

时间:2018-08-16 10:37:53

标签: c# vsto

我正在构建一个VSTO Word加载项,该加载项在单击时会创建一个数组。在一个数组单元格中,我想添加一些文本,新行和RTF内容控件。

通过使用以下代码,我设法使其正常工作:

Word.Table table = Globals.MyAddIn.Application.ActiveDocument.Tables.Add(currentRange, 8, 3, ref missing, ref missing);
range = table.Cell(1, 3).Range;
range.Text = "SomeText" + Environment.NewLine;
range.MoveStartUntil(Environment.NewLine, Word.WdConstants.wdForward);
range.MoveStart(Word.WdUnits.wdCharacter, 1);
range.MoveEnd(Word.WdUnits.wdCharacter, -1);
Word.ContentControl cc = range.ContentControls.Add();
cc.Tag = "someTag";

我不明白为什么需要“ MoveStart”和“ MoveEnd”指令,而不仅仅是使用“ MoveStartUntil”指令。有更好的方法吗?

此外,我想在我写的文本上添加粗体效果,而不是要在内容控制字段中写的文本上添加粗体效果。我尝试添加以下代码,但它不仅适用于我的文本,而且适用于所有单元格。

range.Bold = 1;

2 个答案:

答案 0 :(得分:1)

我猜你在换行符上遇到了麻烦。在这种情况下,您最好的方法是在代码运行时逐步检查并检查每一步System.Exception ex = new System.Exception(); 的值(我通常会发现自己必须这样做,只是为了使事情正常进行)。

Text

您还希望使第一行变为粗体,但是在所有这些步骤中,仅选择了文本“ SomeText”(您需要省略结尾字符,否则在它们之前插入的任何内容也将具有指定的格式) ,因此您必须先对其进行一些修改,然后才能使用Word.Table table = Globals.MyAddIn.Application.ActiveDocument.Tables.Add(currentRange, 8, 3, ref missing, ref missing); range = table.Cell(1, 3).Range; // The text here starts as "\r\a"; if you turn on paragraph marks you will see an icon in each table cell; this must be that character range.Text = "SomeText" + Environment.NewLine; // Now the text is now "SomeText\r\r\a" (NewLine is "\r\n" and I think "\n" gets converted to "\r") // Note that Word will put \r or \a back if you omit them, since you're in a table cell range.MoveStartUntil(Environment.NewLine, Word.WdConstants.wdForward); // Now it's "\r\r\a" range.MoveStart(Word.WdUnits.wdCharacter, 1); // "\r\a" range.MoveEnd(Word.WdUnits.wdCharacter, -1); // finally the text is null (because it's a 0-length range), and in the needed location Word.ContentControl cc = range.ContentControls.Add(); cc.Tag = "someTag";

这是您可以做到的方式:

range.Bold = 1

答案 1 :(得分:0)

您显示的代码在正确的轨道上,仅与如何使用Range对象有关。当然,不止一种方法。下面的代码示例是我的首选。

基本上,您想做三件事,因此您需要使用目标Range三次:文本+粗体;新段落;添加内容控件。

使用范围,然后向其中添加内容的键是折叠范围。可以将其想象为按键盘上的右箭头键将选择折叠到闪烁的插入点。需要对Range执行相同的操作;您可以使用Collapse方法折叠到终点(也可以选择折叠到起点)。

将文本放入“范围”,然后执行所需的任何格式。然后插入段落标记,然后再次需要折叠范围。表格单元格是一种特殊情况:当折叠到表格单元格末尾的末尾时,焦点将集中在下一个单元格中。因此,必须向后移一个字符。

然后可以添加内容控件。

    object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
    rng.Collapse(ref oCollapseEnd);
    Word.Table table = doc.Tables.Add(rng, 8, 3, ref missing, ref missing);
    Word.Range range = table.Cell(1, 3).Range;
    range.Text = "SomeText";
    range.Font.Bold = -1;
    range.InsertAfter(Environment.NewLine);
    range.Collapse(ref oCollapseEnd);
    range.MoveEnd(Word.WdUnits.wdCharacter, -1);
    Word.ContentControl cc = range.ContentControls.Add();
    cc.Tag = "someTag";