Microsoft.Office.Interop.Word Selection.InsertFile()方法 - >如何在范围参数中使用书签

时间:2017-07-25 20:09:02

标签: c# vsto office-interop office-addins

我们正在对MS Word加载项进行更新,允许用户使用以下函数将MS Word文件插入到中央MS Word文档中:

 //Created rng variable
 Microsoft.Office.Interop.Word.Range rng = Globals.ThisAddIn.Application.Selection.Range;
//MS Interop method.
Globals.ThisAddIn.Application.Selection.InsertFile(
     filename,
     rng,//<--Added range                              
     ref missing, //Confirm Conversions
     ref falsevalue, //Link file
     ref falsevalue //Attachment
);

第二个参数:

ref missing, //Range - For Word can be a bookmark

似乎说我们可以传递一个可以作为书签的Range参数(我们可以      可以用来删除添加的内容(如果需要),但是我们无法找到任何演示如何完成此操作的实现示例。

MSDN描述此参数如下:

<小时/> 的 范围

类型:System.Object

可选对象。

如果指定的文件是Word文档,则此参数引用书签。如果文件是另一种类型(例如,Microsoft Excel工作表),则此参数引用命名范围或单元格范围(例如,R1C1:R3C4)。

<小时/> 由于我们要在文本中插入新书签,因此我们假设需要:

  1. 创建新书签,
  2. 将其传递给InsertFile参数列表
  3. 然而在这一点上,由于我们找不到任何如何实现这一目标的例子,我们处于停滞状态。

    我们还找到了这样的例子:

    https://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.bookmark.bookmarks(v=vs.120).aspx

    http://www.c-sharpcorner.com/article/add-replace-and-remove-bookmarks-in-word-using-c-sharp/

    但它们的实现看起来并不像是使用Word Interop或Selection.InsertFile()。

    Intellisense似乎并不表示Microsoft.Office.Interop.Word.Bookmark上的Range属性:

    enter image description here

    感谢。

2 个答案:

答案 0 :(得分:0)

书签(您的第一个链接)是Bookmark个对象的集合。书签具有Range属性。使用它。

答案 1 :(得分:-1)

  

类型:System.Object

     

可选对象。

     

如果指定的文件是Word文档,则此参数引用a   书签。如果文件是另一种类型(例如,Microsoft Excel   工作表),此参数引用命名范围或单元格范围   (例如,R1C1:R3C4)。

Meant是插入文件的书签或范围标识符。

<强> @Edit:

如果您搜索解决方案以在现有书签中插入文件而不删除书签,请尝试以下操作:

var bmRange = bookmark.Range;
string bookmarkName = bookmark.Name;

// plus 1 on the end prevents startRange to collapse on insert.
// be shure there is something after the end
var startRange = document.Range(bmRange.Start, bmRange.End + 1);

object missing = System.Reflection.Missing.Value;
object ConfirmConversions = false;
object Link = false;
object Attachment = false;
bmRange.InsertFile("C:\\somefile.docx", ref missing, ref ConfirmConversions, ref Link, ref Attachment);

// after insert the startRange contains the inserted content + 1
var newRange = document.Range(startRange.Start, startRange.End - 1);
document.Bookmarks.Add(bookmarkName, ref newRange);

稍加修改(你只需要从其他地方获取bmRange和bookmarkName)这也可以在没有现有书签的情况下使用

<强> @ EDIT2: 为Microsoft.Office.Interop.Word.Document:

重新制造为扩展方法
public static void ReplaceBookmarkContentWithFile(this Microsoft.Office.Interop.Word.Document document, string path, Microsoft.Office.Interop.Word.Range range, string bookmarkName)
{
    var startRange = document.Range(range.Start, range.End + 1);

    object missing = System.Reflection.Missing.Value;
    object ConfirmConversions = false;
    object Link = false;
    object Attachment = false;
    range.InsertFile(path, ref missing, ref ConfirmConversions, ref Link, ref Attachment);

    object newRange = document.Range(startRange.Start, startRange.End - 1);
    document.Bookmarks.Add(bookmarkName, ref newRange);
}

称之为:

document.ReplaceBookmarkContentWithFile(path, range, bookmarkName);

适用于...现有书签(如果范围是书签。范围)或不;)