Программно вставить документ Word в существующий документ (Word 2007)

У меня есть документ 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);

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

Однако - вот где у меня проблема. Вставка только включает границы, заголовок и т. Д., Если я вставляю в конец целевого объекта. документ. Если я вставлю его посередине - несмотря на предыдущий разрыв раздела, будет вставлен только текст, а заголовок, границы и т. Д. Будут потеряны.


person Chris B    schedule 27.03.2009    source источник
comment
Если вариант OpenXML вообще возможен, ознакомьтесь с blogs.msdn.com/brian_jones/archive/2010/02/26/ и раздел Объединение нескольких документов Word здесь msdn.microsoft.com/en-us/library/dd469465.aspx   -  person R0MANARMY    schedule 01.04.2010


Ответы (4)


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

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

person Matrim    schedule 27.03.2009
comment
Спасибо за предложение - InsertFile не пробовал. Сейчас я пробую, но изо всех сил пытаюсь заставить его работать ... - person Chris B; 27.03.2009
comment
Я не думаю, что это возможно, потому что я не создаю VSTO-приложение на уровне документа, у меня нет доступа, например, к коллекции элементов управления, которая, по-видимому, требуется для объекта закладки. - person Chris B; 27.03.2009
comment
Жалко, наверное, не поможет, но рабочий пример из вышеперечисленного можно найти здесь devpinoy.org/blogs/keithrull/archive/2007/05/23/ - person Matrim; 30.03.2009
comment
посмотрев на эту ссылку более внимательно - она ​​не использует метод закладок - она ​​использует стандартный метод 'insertfile', который не работает в 2007 (или - я думаю, 2003) - person Chris B; 30.03.2009

Это сработало для меня. Все еще ищу лучшее решение. Обязательно добавьте ссылку на 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");
person frs    schedule 18.01.2017

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

Powertools для Open XML

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

person Chris J    schedule 31.08.2009
comment
Спасибо, что сообщили мне об этом, это дает мне еще одну возможность решить эти проблемы с Office. - person Chris B; 01.09.2009

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

person Universal Saint    schedule 01.04.2010