【问题标题】:Programatically insert a Word document into an existing document (Word 2007)以编程方式将 Word 文档插入现有文档 (Word 2007)
【发布时间】:2009-03-27 10:54:52
【问题描述】:

我有一个 Word 2007 文档,我想将现有的 Word 文档插入其中 - 同时保留两个文档的页眉/页脚、图形、边框等。

我正在使用 C# 中的 Word API 执行此操作。

听起来很简单,我的意思是你肯定只使用“InsertFile”方法...... 除了在 Word 2007 中,“插入文件”功能现在实际上是“从文件中插入文本”,它就是这样做的 - 省略了页面边框、图形和页脚等。

好吧,我将使用复制和粘贴来代替,就像这样......

_Document sourceDocument = wordApplication.Documents.Open(insert the 8 million by ref parameters Word requries)
sourceDocument.Activate(); // This is the document I am copying from 
wordApplication.Selection.WholeStory();
wordApplication.Selection.Copy();
targetDocument.Activate(); // This is the document I am pasting into
wordApplication.Selection.InsertBreak(wdSectionBreakNextPage);
Selection.PasteAndFormat(wdFormatOriginalFormatting);
wordApplication.Selection.InsertBreak(wdSectionBreakNextPage);

它会执行您所期望的操作,获取源文档,选择所有内容,复制它然后将其粘贴到目标文档中。因为我在粘贴之前添加了分节符,所以它还保留了两个文档的边框、页眉/页脚。

但是 - 现在这是我遇到问题的地方。如果我在 end 粘贴,则粘贴包括边框、标题等的目标文件。如果我将它粘贴在中间 - 尽管前面有分节符,那么只有文本被粘贴并且标题和边框等会丢失。

【问题讨论】:

标签: c# api insert word-2007


【解决方案1】:

书签功能会起作用吗? InsertFile 包含从中获取的参数,这可能会解决问题。不过你可能已经考虑过了

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.bookmark.insertfile.aspx

【讨论】:

  • 感谢您的建议 - 我没有尝试过 InsertFile。我现在正在尝试,但正在努力让它工作......
  • 我不认为这是可能的,因为我不是在做一个文档级的 VSTO 应用程序,我无权访问例如书签对象似乎需要的 controlcollection。跨度>
  • 遗憾,可能无济于事,但可以在此处找到上述工作示例devpinoy.org/blogs/keithrull/archive/2007/05/23/…
  • 更仔细地查看该链接 - 它没有使用书签方法 - 它使用的是标准的“insertfile”方法,该方法在 2007 年(或 - 我认为 2003 年)不起作用
【解决方案2】:

这种方法对我有用。仍在寻找更好的解决方案。请务必添加对 Interop.Word 的引用。我知道这是一个旧线程,我使用的是 Word 2016,但我搜索了很长时间,不得不将解决方案拼凑在一起。

using Word = Microsoft.Office.Interop.Word;
var wordApp = new Word.Application();
wordApp.Visible = true;
wordApp.Documents.Add(@"C:\workingtemplate.dotx");
//Open is for an existing document. 
//Add is to use a template.
//Get the range to be able to then collapse and have the correct insertion point
var rng = wordApp.ActiveDocument.Range();
rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
rng.InsertBreak(Word.WdBreakType.wdPageBreak);
rng.InsertFile(@"C:\temp.docx");

【讨论】:

    【解决方案3】:

    我现在实际上正在研究类似的东西,奇怪的是发现了一个用 C# 编写的 powershell cmdlet 库,您可能会觉得它很有用:

    Powertools for Open XML

    如果同一图像位于文档的多个部分,但很多结构已经到位,继承的页眉和页脚以及图像引用未正确复制仍然存在一些问题。

    【讨论】:

    • 感谢您让我知道这一点,它为我提供了解决这些 Office 问题的另一种途径。
    【解决方案4】:

    将 WORD 文档插入到另一个 WORD 2007 文档中 我发现 WORD 2007 成功的唯一方法是…… 打开要添加页面的文档,然后转到功能区上的“插入”选项卡,查看“文本”部分(与文本框、艺术字等相同的位置)并选择“对象”,下拉出现菜单,然后选择“文件中的文本”。从这里您只需选择要插入的文档并完成,您可能需要进行一些细微的调整,但它们的格式都正确,请务必将光标放在您想要插入新内容的位置。希望这会有所帮助

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      相关资源
      最近更新 更多