Программно вставить документ Word в существующий документ (Word 2007) - PullRequest
1 голос
/ 27 марта 2009

У меня есть документ Word 2007, в который я хочу вставить существующий документ Word - с сохранением верхнего / нижнего колонтитула, графики, границ и т. Д. Обоих документов.

Я делаю это с помощью Word API в C #.

Звучит довольно просто, я имею в виду, конечно, вы просто используете метод "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 цели документ. Если я вставлю его посередине - несмотря на предшествующий разрыв раздела, то будет вставлен только текст, а заголовок, границы и т. Д. Будут потеряны.

Ответы [ 4 ]

1 голос
/ 27 марта 2009

Будет ли функционировать закладка. InsertFile содержит параметры, которые можно извлечь из этого, что может обойти проблему. Возможно, вы уже рассмотрели это, хотя

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

0 голосов
/ 18 января 2017

Этот вид работал для меня. Все еще ищу лучшее решение. Обязательно добавьте свою ссылку на 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");
0 голосов
/ 01 апреля 2010

ВСТАВИТЬ ДОКУМЕНТ СЛОВА В ДРУГОЙ ДОКУМЕНТ СЛОВА 2007 Единственный способ, который я нашел успешным для WORD 2007, это ... откройте документ, в который вы хотите добавить страницы, затем перейдите на вкладку «Вставить» на ленте, посмотрите раздел «текст» (там же, где текстовое поле, художественное слово и т. д.) и выберите «объект», выпадающий Появится меню, затем выберите «Текст из файла». Отсюда вы просто выбираете документ, который хотите вставить, и его готово, вам, возможно, потребуется внести некоторую небольшую корректировку, но все это там отформатировано правильно, обязательно поместите курсор в точку, в которую вы хотите вставить новый материал. Надеюсь, это поможет

0 голосов
/ 31 августа 2009

На самом деле я работаю над чем-то похожим в данный момент, как ни странно, и нашел библиотеку PowerShell для командлетов, написанную на C #, которая может оказаться полезной:

Электроинструменты для открытого XML

Это все еще немного глючит с унаследованными верхними и нижними колонтитулами, а также с неправильным копированием ссылок на изображения, если одно и то же изображение находится в нескольких частях документа, но большая часть структуры имеется.

...