【问题标题】:MS Word Interop to C# - Inserting multiple files at a bookmarkMS Word Interop to C# - 在书签处插入多个文件
【发布时间】:2017-07-18 21:44:30
【问题描述】:

我有一个主文档,我想在其中插入多个文件。这些应该在文档中间的某个点一个接一个地插入到文件中。

所以我在此时创建了一个名为“TESTS”的书签,因为这似乎是以编程方式找到该点的最简单方法。

我可以使用此代码插入单个文件:

 Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();
 Microsoft.Office.Interop.Word.Document oWordDoc = oWord.Documents.Open(@"C:\master.doc");
 oWordDoc.Bookmarks.Cast<Bookmark>().First(b => b.Name == "TESTS").Range.InsertFile(@"C:\test1.doc");

但这会删除书签,从而无法在同一点插入第二个文件。我不介意丢失书签,但只有在我插入所有文件后。

这可以吗?我猜上面的代码用书签替换了范围,所以在之前或之后找到位置然后删除书签范围是最好的 - 但我找不到它的代码。我尝试过的一切似乎都替换了整个文档。

或者,是否有任何方法可以在没有互操作的情况下执行此操作(即通过解析文件 - 根本不接触 MS Word)?

【问题讨论】:

  • 我可以使用您的代码示例多次调用 Bookmark("TESTS").Range.InsertFile 并按预期插入两个文件中的内容。
  • 真的吗?我正在使用以下代码:oWordDoc.Bookmarks.get_Item("TESTS").Range.InsertFile(@"C:\test1.doc"); oWordDoc.Bookmarks.get_Item("TESTS").Range.InsertFile(@"C:\test1.doc");,它第二次不起作用。什么可能导致这种差异?

标签: c# ms-word office-interop


【解决方案1】:

您的文档的设置方式和书签的确切范围必须有一些特别之处,因为我能够在不丢失书签的情况下使其正常工作。根据这篇 MVP 文章Inserting text at a bookmark without deleting the bookmark,将 Text 添加到书签范围应该删除书签;也许您在使用 InsertFile 时遇到了类似的问题。

尝试他们将书签的范围存储到变量中的建议,即MyRange,然后调用Bookmarks.Add "mybookmark", MyRange

Dim BMRange As Range 

Set BMRange = ActiveDocument.Bookmarks("MyBookmark").Range 
BMRange.Text = "Hello world" 

ActiveDocument.Bookmarks.Add "MyBookmark", BMRange

【讨论】:

    猜你喜欢
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多