Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2010, 15:10   #1
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию Как грамотно собрать файл из частей ?

Есть некий файл отчета. Частично набранный вручную, отформатированный (заголовки, стили , вставлены ссылки на доп. таблицы и рисунки и т.п.). Содержимое файла создается программно - в отдельные файлы docx. Одна глава отчета - один файл.
В итоге надо получить один результирующий большой файл.
Под 2003 ворд это решалось так Вставка- Файл - Вставить как ссылку. Потом нужно было открыть файл и обновить эти связи.
В 2007-ом ворде это почему то не проходит (( Даже при одном связано файле ворд зависает и в конечном итоге выпадает с ошибкой.
Какие еще есть подходы к сборке файлов ? чем можно программно возможно проще заменить решение выше ?
bdfy вне форума Ответить с цитированием
Старый 17.09.2010, 16:19   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Как грамотно — не скажу (не прошёл ликбез!), но у меня работает вот такая штука:
{LINK Word.Document.8 D:\\Sasha\\issue20-2-1.doc здесь_тот_кусок \t \* MERGEFORMAT}
Как выпонимаете, это поле. Код его вводят между {}, вставленных по Ctrl-F9.

Если ключ \t убрать, будет не текст — а рисунок тех страниц (формата DOC), на которые линк (либо на документы в целом). Как с форматом DOCX, не знаю (воможно, Word.Document.9).

Если показать надо лишь часть — ставим в те документы закладки (в примере закладка — здесь_тот_кусок, межу путём и ключами).

Идея: вероятно, это сработает и в документе *.DOCX, если его собрать из ссылок на разные *.DOC (можно и на *.XLS — Excel.Document.8 либо Excel.Sheet.8); что там с *.XLSx или *.XLSm, не знаю.

Повторяю: на современных вордах не испытывал!

Последний раз редактировалось Sasha_Smirnov; 17.09.2010 в 17:14. Причина: Worksheet→Sheet
Sasha_Smirnov вне форума Ответить с цитированием
Старый 17.09.2010, 16:38   #3
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

с ключом то \r оно сработало.
http://www.bettersolutions.com/word/...I443717572.htm
я INCLUDEtext до того использовал - вело к падениям.
но все равно тормозит и подглючивает периодически. что с LINK что с INCLUDEtext. стоит только десяток ссылок вставить. то форматирование слетит, то текст вдруг жирным станет. как "железно" собрать интересно ? чем удобнее всего разметить документ чтобы указать где часть текста вставляемая программно ?

Последний раз редактировалось bdfy; 17.09.2010 в 17:12.
bdfy вне форума Ответить с цитированием
Старый 17.09.2010, 17:16   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Это не то чтобы программно... Спасибо за ссылку на мануал! Там я не наблюдаю ключа \* MERGEFORMAT. Может, он поможет?

Как надёжно, похоже не знают даже сами разработчики. Похоже, вся эта круть используется (на русском пространстве) лишь одним процентом "профессиональных" юзеров ворда. И то дай бог что это так!

Иногда часами в сей степи гуляю — ищу интересные кочки!

Последний раз редактировалось Sasha_Smirnov; 17.09.2010 в 17:25. Причина: "профессиональных"
Sasha_Smirnov вне форума Ответить с цитированием
Старый 17.09.2010, 17:24   #5
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

\* MERGEFORMAT он вставляется автоматом похоже. т.е после пересохранения файла все ссылки получают этот параметр. и у меня ощущение что он наоборот мешает.

вставить линки это одно решение. оно не работает почему то. Части документа я все равно набираю программно, могу и вставить программно в общую записку.
Вопрос как общий отчет лучше разметить ? закладками ?
как закладку очистить для добавления нового текста ?
Set a = ActiveDocument.Range(Start:=ActiveD ocument.Bookmarks(1).Start, End:=ActiveDocument.Bookmarks(1).En d)
Set a = ActiveDocument.Bookmarks(1).range
перепробовал. выделяет всю закладку целиком. соответственно a.delete удаляет закладку полностью а не очищает ее.

ибо я алгоритм вижу так:
- найти в документе закладку
- удалить ее содержимое (прошлый текст например). либо удалить закладку целиком
- вставить в закладку или на ее место новый текст
- если закладка удалялось надо создать такую же новую. только вот InsertFile как назло ничего не возвращает (( и как узнать range того что я вставил тогда ?

Последний раз редактировалось bdfy; 17.09.2010 в 18:58.
bdfy вне форума Ответить с цитированием
Старый 19.09.2010, 03:18   #6
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

Код:
bname = "отчет1"

Set oDoc = ThisDocument
If oDoc.Bookmarks.Exists(Name:=bname) Then

Debug.Print "пошел"

    Set oBm = oDoc.Bookmarks(bname)
    
    Set oRng = oBm.Range
        
        oRng.InsertFile FileName:=bname & ".docx", Range:="", _
            ConfirmConversions:=False, Link:=False, Attachment:=False
            
        oRng.Select
        oRng.Fields.Update
        
        oBm.Delete
    
        With oDoc.Bookmarks
            .Add Range:=oRng, Name:=bname
        End With
    
End If
вот все было бы здорово если бы .InsertFile возвращал range свой новый ( ибо закладка создается аккурат на старом месте - т.е в самом начале вставленного текста. а я хочу чтобы закладка вклчала в себя весь вставленный текст. чтобы его потерить можно было при повторном запуске. как это сделать ?
ImportFragment тоже ничего не возвращает ((
http://msdn.microsoft.com/en-us/libr...tfragment.aspx
вот с виду команда которая должна бы мне помочь -но не работает ( неужели единственный путь это ставить две закладки для начала и конца фгагмента ?

Последний раз редактировалось bdfy; 19.09.2010 в 19:41.
bdfy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разделить файл на несколько частей provodnikam Microsoft Office Excel 71 17.10.2018 16:33
Собрать несколько dbf в один Эксель файл. Elpis Microsoft Office Excel 47 16.01.2015 05:29
Разобрать,отредактировать и собрать обратно exe файл. Sintez_ice Помощь студентам 13 14.11.2012 20:46
Как все edit собрать в переменную и записать в файл f1xed Помощь студентам 9 07.02.2010 23:18
Как сделат грамотно меню Manonia HTML и CSS 5 19.01.2010 12:43