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

Тема в разделе "Lotus - Программирование", создана пользователем lionk, 26 мар 2008.

  1. lionk

    lionk Well-Known Member

    Регистрация:
    5 апр 2007
    Сообщения:
    308
    Симпатии:
    3
    Сразу сорри за поднятие темы которую и так часто поднимают.

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

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

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

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

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

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

    Код (Text):
                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
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    lionk
    Так-с .. я не осилиил, вроде как направление правильное ( тоже что и Set wordApp = CreateObject ("Word.Application") )
    Детальное описания методов/свойств классов сматрите в справке к VBA
    Можете также ознакомиться с нашими наработками
     
  3. lionk

    lionk Well-Known Member

    Регистрация:
    5 апр 2007
    Сообщения:
    308
    Симпатии:
    3
    Morpheus
    я это всё читал
    нужно чтобы файл не сохранялся на диске, или у вас есть механизм подчистки?
    а что за справка VBA?
     
  4. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    ну это можно просто убить файл ( средствами лотуса kill )

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

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

    ну и шо такое VBA
     
  5. oxystile

    oxystile Гость

    так а у Вас ворд документ создается на основе шаблона?
    у меня на сервере лежат шаблоны (.dot) в них я забила поля
    а через Script library поля эти заполняются:
    bookmark01="enternumber" -поле в документе
    .Selection.GoTo wdGoToBookmark, , , bookmark01
    .Selection.TypeText ishnumber
    если у Вас похожая задача, то могу расписать подробнее
     
  6. lionk

    lionk Well-Known Member

    Регистрация:
    5 апр 2007
    Сообщения:
    308
    Симпатии:
    3
    oxystile
    кинь код
    как ты создаёш новый документ на основе шаблона
     
  7. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    lionk
    Код (Text):
    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 - путь к шаблону
     
  8. oxystile

    oxystile Гость

    см. в ScriptLibraries
    (файл прицеплен)

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

    Вложения:

    • example.zip
      Размер файла:
      21,6 КБ
      Просмотров:
      24
  9. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    архивируйте
     
  10. oxystile

    oxystile Гость

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

    Вложения:

    • Soft.rar
      Размер файла:
      6,1 КБ
      Просмотров:
      23
  11. lionk

    lionk Well-Known Member

    Регистрация:
    5 апр 2007
    Сообщения:
    308
    Симпатии:
    3
    спасибо за пример.

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

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

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

    вопрос дня
    как создать новый документ на основе другого документа?
     
  12. Гость

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

    lionk Well-Known Member

    Регистрация:
    5 апр 2007
    Сообщения:
    308
    Симпатии:
    3
    Ерюков Алексей
    я хочу создавать на основе шаблона что находится на локальном диске, и поєтому прямой вопрос

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

    Sandr Гость

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

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

    Код (Text):
        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
    и дальше уже распоряжайтесь с ним по своему усмотрению
     
  16. lionk

    lionk Well-Known Member

    Регистрация:
    5 апр 2007
    Сообщения:
    308
    Симпатии:
    3
    вот пример базы с печатью.
    кажется нашол причину по которой не работает.

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

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

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

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

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

    Вложения:

    • toword.rar
      Размер файла:
      50 КБ
      Просмотров:
      23
  17. Гость

    Тут два варианта. Первый (менее возможный, скорее всего я Вас не понял) - у Вас WordObject.Visible = True выполняется до заполнения документа. Но это вряд ли. и второй вариант: вам вашу переменную под ворд надо описать в глобальных переменных, а не на кнопке, так как после завершения выполняемых действий по нажатию кнопки все переменные обнуляются. Попробуйте переменную сделать глобальной.
     
  18. lionk

    lionk Well-Known Member

    Регистрация:
    5 апр 2007
    Сообщения:
    308
    Симпатии:
    3
    в примере переменные глобальные,
    находятся в секции globals:delaration формы. обявлены так
    Dim object As Variant
    Dim worddoc As Variant
    Dim word As Variant

    как более глобально их обявить я незнаю :(
     
  19. Гость

    дальше уже некуда...
     
Загрузка...

Поделиться этой страницей