Из лотуса в ворд

  • Автор темы Автор темы lionk
  • Дата начала Дата начала
L

lionk

Сразу сорри за поднятие темы которую и так часто поднимают.

По форуму искал решений нашол много, старых и не очень но окончательной реализации которая меня устроила ненашол.

хочу зделать так:
есть документ(лотус) "Форма печати" в котором лежит оле обект вордовского документа в которм нужно заменить поля на значения из лотус документа что выгружаем.

вод код кнопки печати
и он не работает, не возможно достучатся к обекту ворда, он есть но ниже уровня word.Application.document опустится нельзя.

разбирался как єто делается в екселе там документ сохраняется на диск, инициализируется и потом сохранение убивается.

добавил механизм сохранения и переоткрытия, всё зарабоало, но открывается мой док и ещё один, и на диске остаётся файл, удалить его нельзя бо занят вордом.

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

Код:
			Set formdoc=GetPrintFormByAlias ("Word") 
If formdoc Is Nothing Then
Print "doc for report is Nothing !"
Exit Sub
End If

Set rtitem=formdoc.GetfirstItem("PrintFormBody")	
Set object=rtitem.EmbeddedObjects(0)
Print "Инициализация " & object.Class & " ..."

Set worddoc=object.Activate(False)

Set word=worddoc.Application


v=Evaluate(|@Unique+".doc"|)
Path=word.Path+"\"+Cstr(v(0))
Call worddoc.SaveAs(path)

Call word.Application.documents.Open(path)

'Kill Path		

worddoc.FormFields(1).result = "!!!!!!!!!!!!!!!!!!!!!!"

worddoc.Application.Visible = True
 
lionk
Так-с .. я не осилиил, вроде как направление правильное ( тоже что и Set wordApp = CreateObject ("Word.Application") )
Детальное описания методов/свойств классов сматрите в справке к VBA
Можете также ознакомиться с нашими наработками
 
Morpheus
я это всё читал
нужно чтобы файл не сохранялся на диске, или у вас есть механизм подчистки?
а что за справка VBA?
 
нужно чтобы небыло лишнего дока в памяти и на диске.
ну это можно просто убить файл ( средствами лотуса kill )

перед этим надо ыйти из ворда через вордовский Quit

Вот это и есть Call word.Application.documents.Open(path) - VBA ( Visual Basic for Applications ). Когда устанавливаете офис, поставте галочку справка по VBA там всё детально расписанно

 
так а у Вас ворд документ создается на основе шаблона?
у меня на сервере лежат шаблоны (.dot) в них я забила поля
а через Script library поля эти заполняются:
bookmark01="enternumber" -поле в документе
.Selection.GoTo wdGoToBookmark, , , bookmark01
.Selection.TypeText ishnumber
если у Вас похожая задача, то могу расписать подробнее
 
oxystile
кинь код
как ты создаёш новый документ на основе шаблона
 
lionk
Код:
Sub OpenExcel( FilePath )
Print "Відкриття Excel..."
Set exApp = CreateObject("Excel.Application")
If exApp Is Nothing Then Messagebox "Не встановленний Excel!!!", 0 + 16 , "Друк"
exApp.Visible = False ' видно или нет
Call exApp.Workbooks.Add( FilePath )
Set exWb = exApp.ActiveWorkBook
Set Sh = exWb.Sheets(1)
End Sub

где FilePath - путь к шаблону
 
см. в ScriptLibraries
(файл прицеплен)

сам шаблон .dot с полями не удалось прицепить, пишет "нет прав на прицепку таких вложений"
 

Вложения

шаблон, оставила фактически только поля :)
 

Вложения

  • Soft.rar
    Soft.rar
    6,1 КБ · Просмотры: 153
спасибо за пример.

там ты просто открываеш документ с сервера.

в екселе создают книгу на оспове книги Call exApp.Workbooks.Add( FilePath )

а в ворде word.Application.documents.add(path) - открывает док в рамках приложения занимая тем самым файл
который мне надо удалить

вопрос дня
как создать новый документ на основе другого документа?
 
Да разные есть способы. Что конкретно Вам надо? Можно же не на основе шаблона создавать, а на основе прикрепленного doc файла. Можно хоть открыть любой doc документ и скопировать все его содержимое в новый документ. По-моему Вам были даны исчерпывающие ответы и даже примеры.
 
Ерюков Алексей
я хочу создавать на основе шаблона что находится на локальном диске, и поєтому прямой вопрос

как програмно создать ворд документ на основе другого документа такми образом, чтобы шаблонный документ после зоздания был освобождён вордом и мог быть удалён?
 
Ерюков Алексей
я хочу создавать на основе шаблона что находится на локальном диске, и поєтому прямой вопрос

как програмно создать ворд документ на основе другого документа такми образом, чтобы шаблонный документ после зоздания был освобождён вордом и мог быть удалён?

Выкладываете шаблон (как обычний аттач) по нужному Вам пути (обычно используют темповые папки), делаете с выложенным файлом что хотите и открываете пользователю.
С самим шаблоном ничего при этом не произойдет...
 
Ерюков Алексей
я хочу создавать на основе шаблона что находится на локальном диске, и поєтому прямой вопрос

как програмно создать ворд документ на основе другого документа такми образом, чтобы шаблонный документ после зоздания был освобождён вордом и мог быть удалён?

Вы же сами написали в первом своем сообщении, что у Вас есть документ, в котором ваш шаблон. Насколько я понял он у вас там приаттачен. Вам надо выполнить совет Sandr и будет Вам счастье!
Вот что то вроде того:

Код:
	Set TemplateDoc = db.GetProfileDocument("($BlankTemplate)")	
If TemplateDoc Is Nothing Then
Messagebox "Профильный документ не найден", MB_OK + MB_ICONSTOP, "ERROR!"
Exit Sub
End If

Set rtitem = TemplateDoc.GetFirstItem("Document")
If rtitem Is Nothing Then
Messagebox "Шаблон не найден, проверьте настроики шаблона", MB_OK, "Внимание"
Exit Sub
End If

path = "путь к Вашему файлу(обычно Temp папка)"

Set TemplateObject = rtitem.EmbeddedObjects(0)
Call TemplateObject.ExtractFile (path & "\document.doc")

'Создание Word-документа

Dim wordObject As Variant

Set wordObject = CreateObject("Word.Application") 'Создание объекта Word'a
Call wordObject.documents.add(path & "\document.doc") 'открытие документа
Set WordDoc = wordObject.activedocument 'Активация объекта
WordObject.Visible = False 'Сделать видимым окно Word'a
Set Word = WordDoc.Application

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

проблема в том что обект документа освобождается после выполнения кода кнопки "печать"

как протестить:
если запустить печать в обычном режиме получаю пустое окно ворда.

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

может ктото подскажет как побороть єтот глюк?

PS Если всё заработает обязуюсь на форуме выложить качественный пример выгрузки в ворд (преимуществом которого есть централизованое хранение всех документов-шаблонов в одной базе и отсутсвие необходимости работы с шаблонами на файловом уровне(предварительное сохранение на винте или копирование с сервера))
 

Вложения

Тут два варианта. Первый (менее возможный, скорее всего я Вас не понял) - у Вас WordObject.Visible = True выполняется до заполнения документа. Но это вряд ли. и второй вариант: вам вашу переменную под ворд надо описать в глобальных переменных, а не на кнопке, так как после завершения выполняемых действий по нажатию кнопки все переменные обнуляются. Попробуйте переменную сделать глобальной.
 
в примере переменные глобальные,
находятся в секции globals:delaration формы. обявлены так
Dim object As Variant
Dim worddoc As Variant
Dim word As Variant

как более глобально их обявить я незнаю :(
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!