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