繁体   English   中英

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

[英]How to copy a word document content in another word document, including bookmarks?

我想将一个Word文档的内容复制到另一个Word文档,包括书签。 我如何使用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书签?

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

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

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);

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

这是一些代码,用于复制从此处获取的Word文档:使用OpenXml和C#复制Word文档

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
  // ...
}

假设目的是使用副本,而使原始副本保持不变,则Word的最佳方法是使用Documents.Add ,将原始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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM