Замена файла Word в поле ReachText

Тема в разделе "Lotus - Программирование", создана пользователем GROMILA, 11 май 2004.

  1. GROMILA

    GROMILA Well-Known Member

    Регистрация:
    8 апр 2004
    Сообщения:
    297
    Симпатии:
    0
    Ситуация:
    На форме есть поле "rtDocPreview" типа "Rich text",
    где хранится файл Word, который загружается по кнопке "Выбрать".
    Пользователь выдит содержимое этого прикрепленного файла (предпросмотр)

    В поле него "rtDocPreview" внедряется OLE объект путем notesUIDocument.CreateObject.

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

    Я пытаюсь это делать так:
    1. Удалить EmbeddedObject,
    2. Вставить другой на его место.

    Удаление делаю так:

    Код (Text):
    Dim ws As New NotesUIWorkspace
    Dim doc As NotesDocument
    Dim rtitem As NotesRichTextItem

    Set doc = ws.CurrentDocument.Document
    Set rtitem = doc.GetFirstItem( "rtDocPreview" )
    If ( rtitem.Type = RICHTEXT ) Then
    If Not( Isempty(rtitem.EmbeddedObjects) ) Then
    Forall eo In rtitem.EmbeddedObjects
    Call eo.Remove
    Call rtitem.Update
    Call doc.Save(True , True )
    End Forall
    End If

    End If
    Удаление происходит, однако поле "rtDocPreview" не обновлятся.
    Оно обновляется если только переоткрыть документ.

    Вопрос:
    1. Как обновить поле "Rich text" после удаления EmbeddedObject?
    2. Может есть другой способ обновить объект?
     
  2. Veselinka

    Veselinka Гость

    Если я правильно поняла - то цель - открыть другой файл, а в документ приатачить этот.
    Предлагаемое решение не подойдет для всех деловых прецедентов, но в ряде случаев можно:

    1. Файл приатачить как ты уже делал
    2. А открывать не файл с РТФ поля, а тот который выбрали с файлухи, сделать это можно так:
    ( просто вставляю код не чистя лишнее, но наглядно будет)
    Dim MSApp As Variant, dCN As Variant
    Dim ds As Variant, d As Variant

    If Not Isobject (MSApp) Then
    Set MSApp = CreateObject ("Word.Application")
    Set ds = MSApp.Documents
    Set d = ds.Add ()
    End If

    Set dCN = ds.Open (fileName)
    Call dCN.Range ().Copy ()
    Call d.Range(d.Range().End -1, d.Range().End -1).Paste ()
    Call d.Range(d.Range().End -1, d.Range().End -1).InsertBreak()

    Call dCN.Close ()
    bool = True
    Kill fileName

    If Isobject (MSApp) Then
    If Not MSApp.Visible Then MSApp.Visible = True
    If Isobject (d) Then Call d.Range(d.Range().End -2, d.Range().End -1).Delete ()
    End If

    Есть вариант, который прокатит при всех деловых прецедентах:
    При выборе файла - реализвать описанный атач нового объекта, далее:

    unid=doc.universalid
    doc.saveOptions="0"
    call doc.save(true,true)
    call ws.currentdocument.close

    это позволит закрыть документ без вопроса о сохранении

    теперь:
    set doc=db.GetDocumentbyUNID(unid)
    call ws.editdocument(true,doc)
    call doc.RemoveItem("saveoptions")
    call doc.save(true,true)

    ну а потом активируй объект - скорее всего получиться все нормально. Может и не получиться... хотя должно
     
  3. Veselinka

    Veselinka Гость

    Я не виновата, что механизм форума вставляет вместо закрывающей скобки смайлики.
     
  4. Gogan.exe

    Gogan.exe Гость

    при послке ответа, Veselinka, можно отменить галочку "Включить смайлики?", тогда смайликов в сообщении не будет, а будет скобка.
     
  5. Veselinka

    Veselinka Гость

    Gogan.exe, спасибо
    ;)
     
  6. GROMILA

    GROMILA Well-Known Member

    Регистрация:
    8 апр 2004
    Сообщения:
    297
    Симпатии:
    0
    Спасибо Веселинка :)
    Замечание
    Код (Text):
    Call dCN.Range ().Copy ()
    Call d.Range(d.Range().End -1, d.Range().End -1).Paste ()
    В любом случае сие плохо! Так как затирает текущее содержимое буфера обмена.
     
Загрузка...

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