VSTO Word 加载项 - 在所选文本周围插入内容控件

Posted

技术标签:

【中文标题】VSTO Word 加载项 - 在所选文本周围插入内容控件【英文标题】:VSTO Word Add-in - insert Content Control around selected text 【发布时间】:2015-11-28 11:38:35 【问题描述】:

我正在尝试在 Word 文档中围绕用户选定的文本添加富文本内容控件。

我是 VSTO 和内容控件的新手,所以我使用 MSDN 示例作为基线。该示例显示了这一点,它在所选位置添加了内容控件:

private void AddRichTextControlAtSelection()
        
            word.Document currentDocument = Globals.ThisAddIn.Application.ActiveDocument;

            currentDocument.Paragraphs[1].Range.InsertParagraphBefore();
            currentDocument.Paragraphs[1].Range.Select();

            Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument);

            richTextControl1 = extendedDocument.Controls.AddRichTextContentControl("richTextControl1");
            richTextControl1.PlaceholderText = "Enter your first name";
        

但是我希望内容控件环绕用户选择的文本。请帮忙?

【问题讨论】:

简单修复到底:currentDocument.ActiveWindow.Selection.Range.Select(); 如果您回答了自己的问题,请发布您的答案并接受。 【参考方案1】:

您发现的是一种可能性。更有效和“更清洁”(IMO)将使用接受 RANGE 对象并传递 Range 的构造函数。如果你想要用户的选择,那么

richTextControl1 = extendedDocument.Controls.AddRichTextContentControl(extendedDocument.Parent.Selection.Range, "richTextControl1");
//the Parent of a Document is the Word.Application
//Selection is a dependent of the Word.Application

否则,在您的代码示例上构建:

richTextControl1 = extendedDocument.Controls.AddRichTextContentControl(currentDocument.Paragraphs[1].Range, "richTextControl1");

请注意,如果您不需要使用 VSTO 的内容控件扩展,则无需执行 GlobalFactory 步骤,您只需插入内容控件的“互操作”版本即可。

【讨论】:

【参考方案2】:

最后简单修复:currentDocument.ActiveWindow.Selection.Range.Select();

【讨论】:

以上是关于VSTO Word 加载项 - 在所选文本周围插入内容控件的主要内容,如果未能解决你的问题,请参考以下文章

MS Office Word VSTO“按需加载”

VSTO Word 加载项:内容控制嵌套

在 VSTO for Word 中完全隐藏内容控制

jQuery HTML/CSS 方法大全

PHP - 解析 HTML,选择标签,在所选标签内插入另一个 HTML 字符串

急求C#窗体操作VSTO如何向word模板中的特定文本框添加图文信息