У меня есть проблема, с которой я столкнулся уже больше года.Я создал приложение Forms на VB.net, которое позволяет пользователю вводить некоторую информацию и выбирать элементы, которые представляют собой docx-файлы с таблицами со специальным форматированием, изображениями и другими особенностями форматирования в них.
В концепрограммное обеспечение создает документ Word через Office.Interop, используя информацию, предоставленную пользователем в текстовых полях в формах, и элементы, которые они выбрали (например, создает таблицу в Word, перечисляя выбор пользователя с некоторой дополнительной информацией), а затем добавляет содержимоеиз нескольких docx-файлов в зависимости от выбора пользователя к документу, созданному с помощью Interop.
Проблема в том, что для этого мне пришлось использовать довольно грязный метод: я открываю соответствующие docx-файлы, выбираю все содержимое(Range.Wholestory ()) и скопируйте его (Range.Copy ()).Затем я вставляю это содержимое из буфера обмена в свой недавно созданный документ со следующей опцией:
Selection.PasteAndFormat (wdFormatOriginalFormatting)
Это дает удовлетворительный результат, но выглядит очень грязно, так как использует буфер обмена пользователя (который я сохраняю в началевремени выполнения и восстановления в конце).
Первоначально я пытался использовать метод Selection.InsertFile и повторил попытку сегодня, но он полностью искажает форматирование.
Когда содержимоеdocx вставляется таким образом, что в нем нет ни форматирования исходного документа, ни файла, созданного мной с помощью программы.Например, значения SpaceBefore и SpaceAfter неверны, даже если я явно определяю их в своем созданном файле.Изменение форматирования впоследствии невозможно, поскольку исходные файлы содержат много специального форматирования и могут постоянно изменяться.
Еще один фактор, который усложняет задачу: я не могу сохранить файл до того, как он будет представлен пользователю,использование временной папки - не вариант в среде, в которой развернуто это приложение, поэтому в основном все происходит в ОЗУ.
Резюме:
По сути, я хочу создатьтот же результат, что и в моем методе «Копирование и вставка» с использованием OriginalFormatting БЕЗ использования буфера обмена.Проблема в том, что метод InsertFile не предоставляет опцию для форматирования.
Любая идея или помощь будет принята с благодарностью.
Редактировать:
Параметр FormattedText, предложенный Rich Michaels, дает тот же результат, что и метод InsertFile.Вот соответствующая часть того, что я сделал (слово Microsoft.Office.Interop.Word.Application):
#Opening the source file
Dim doctemp As Microsoft.Office.Interop.Word.Document
doctemp = word.Documents.Open(doctempfilepath)
#Selecting whole document; this is what I did for the "Copy/Paste"-Method, too
doctemp.Range.WholeStory()
Dim insert_range As wordoptions.Range
doc_destination.Activate()
#Jumping to the end and selecting the range
word.Selection.EndKey(Unit:=Microsoft.Office.Interop.Word.WdUnits.wdStory)
insert_range = word.Selection.Range
#Inserting the text
insert_range.FormattedText = doctemp.Range.FormattedText
doctemp.Close(False)
Это проблема: