我正在构建一个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;
答案 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";