如何在另一个Word文档(包括书签)中复制Word文档的内容?

时间:2019-05-24 08:01:05

标签: c# ms-word copy

我想将一个单词文档的内容复制到另一个单词文档,包括书签。我如何使用C#做到这一点?

我尝试使用Microsoft.Office.Interop.Word。

Application wApp = new Application();
Documents wDocs = wApp.Documents;
Document wDocTemplate = wDocs.Open(@"source\path\source.docx", Type.Missing, true);
Range oRange = wDocTemplate.Content;
oRange.Copy();
wDocTemplate.ActiveWindow.Selection.WholeStory();
Document wDoc = wApp.Documents.Add();
wDoc.Content.PasteSpecial(DataType: WdPasteOptions.wdKeepSourceFormatting);
wDoc.SaveAs(@"destination\path\destination.docx");
wDoc.Activate();

但是在destination.docx中没有source.docx书签。如何在同一位置的destination.docx中包含source.docx书签?

3 个答案:

答案 0 :(得分:1)

正如我的评论中所述,复制整个内容与将文档副本保存到新位置没有什么不同。只需使用System.IO.File.Copy,您甚至可以在没有Word的情况下实现这一目标。

话虽如此,这只是通过Word互操作实现此目的的一个示例,以防万一您只想将文档的一部分保存到另一个文档中(例如,Content以外的其他范围): / p>

var wdApp=new Word.Application();
var docments = wdApp.Documents;
var doc = docments.Open(pathToSourceDoc);
var doc2 = docments.Add();
doc.Content.Copy();
doc2.Content.Paste();
doc2.SaveAs(pathToCopyDoc);
doc2.Close();
doc.Close();
Marshal.ReleaseComObject(doc2);
Marshal.ReleaseComObject(doc);
Marshal.ReleaseComObject(docments);
wdApp.Quit();
Marshal.ReleaseComObject(wdApp);

答案 1 :(得分:0)

我建议您使用Open XML SDK。 您可以在这里找到官方文档 https://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk

以下是一些代码,用于复制从此处获取的Word文档:Duplicating Word document using OpenXml and C#

using (var mainDoc = WordprocessingDocument.Open(@"c:\sourcedoc.docx", false))
using (var resultDoc = WordprocessingDocument.Create(@"c:\newdoc.docx",
  WordprocessingDocumentType.Document))
{
  // copy parts from source document to new document
  foreach (var part in mainDoc.Parts)
    resultDoc.AddPart(part.OpenXmlPart, part.RelationshipId);
  // perform replacements in resultDoc.MainDocumentPart
  // ...
}

答案 2 :(得分:0)

假设目的是使用副本,而使原始文档保持不变,则Word的最佳方法是使用Documents.Add,将原始文档指定为要用于新文档的“模板”。 (注意:此方法可以使用文档以及模板文件。)这将在Word应用程序界面中创建原始文档的副本,以便代码或用户可以继续在其中工作。无需打开原始文件;没有对它进行意外更改的危险。

Application wApp = new Application();
Documents wDocs = wApp.Documents;
Document wDoc = wDocs.Add(@"source\path\source.docx", Type.Missing, Type.Missing, true);
Range oRange = wDoc.Content;
wDoc.SaveAs(@"destination\path\destination.docx");
wDoc.Activate();