Как скопировать содержимое документа word в документ word, включая закладки? - PullRequest
0 голосов
/ 24 мая 2019

Я хочу скопировать содержимое документа 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.Как я могу включить закладки source.docx в destination.docx в тех же позициях?

Ответы [ 3 ]

1 голос
/ 24 мая 2019

Как уже упоминалось в моем комментарии, копирование всего содержимого ничем не отличается от сохранения копии документа на новом месте.Вы даже можете достичь этого без 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);
0 голосов
/ 25 мая 2019

Предполагая, что цель состоит в том, чтобы работать с копией, оставляя оригинал без изменений, оптимальным подходом для 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();
0 голосов
/ 24 мая 2019

Я бы порекомендовал вам использовать Open XML SDK.Вы можете найти официальную документацию здесь https://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk

Вот некоторый код для копирования документа Word, взятого отсюда: Дублирование документа Word с использованием OpenXml и 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
  // ...
}
...