Richtext To Word

Тема в разделе "Lotus - Программирование", создана пользователем yerke, 4 дек 2007.

  1. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    Привет всем
    Подскажите пожалуйста

    Как будет правильнее экспортировать значение форматируемого поля в ворд?
    Ворд файл формирую с помощью PRINT-а и хтмл тегов

    Код (Text):
    dim var as variant
    var=doc.GetItemValue("Question")
    Print #1, "<u>"+Cstr(var(0))+"</u><br>"
    не помогает
    печатается пустая строка
     
  2. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: yerke
    Когдато ктото выкладывал тут базку с переносом рт поля в ворд... надо поискать

    Нашёл: ув. Elena Nefedova положила нам тут красивый примерчик
     
  3. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    p.s.
    richtext поле может содержать текст и объект microsoft equation
     
  4. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: yerke
    а там если не ошибаюсь используетсья буфер обмена, так что пробуйте
     
  5. Azrael

    Azrael Гость

    Для: yerke
    Я в своё время примерно вот так делал для вставки в определённую ячейку таблицы ворда:
    Код (Text):
    Call ui.SelectAll
    Call ui.Copy
    Call ui.DeselectAll
    docW.Tables(Cint(stNum)).Cell(Cint(stNumRow),Cint(stNumColumn)).Range.Paste
     
  6. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    <!--QuoteBegin-Morpheus+4:12:2007, 12:53 -->
    <span class="vbquote">(Morpheus @ 4:12:2007, 12:53 )</span><!--QuoteEBegin-->Для: yerke
    Когдато ктото выкладывал тут базку с переносом рт поля в ворд... надо поискать

    Нашёл: ув. Elena Nefedova положила нам тут красивый примерчик


    [snapback]88188" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    из выше описанного кода
    я понял следующее

    циклом бежим по анпроседит документс
    в цикле открываем каждый док в уи в едит моуд
    устанавливаем курсорчик в нужное рт поле
    выделяем все
    копируем в буфер
    закрываем документ который в уи находится

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

    ВОПРОС
    у меня около 100 000 документов
    не будет ли работать агент ОООООчень долга когда открывает и закрывает все эти доки
    в уи



    <!--QuoteBegin-Azrael+4:12:2007, 13:05 -->
    <span class="vbquote">(Azrael @ 4:12:2007, 13:05 )</span><!--QuoteEBegin-->Для: yerke
    Я в своё время примерно вот так делал для вставки в определённую ячейку таблицы ворда:
    Код
    Call ui.SelectAll
    Call ui.Copy
    Call ui.DeselectAll
    docW.Tables(Cint(stNum)).Cell(Cint(stNumRow),Cint(stNumColumn)).Range.Paste



    [snapback]88195" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    если можно по подробнее
     
  7. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-yerke+4:12:2007, 09:49 -->
    <span class="vbquote">(yerke @ 4:12:2007, 09:49 )</span><!--QuoteEBegin-->если можно по подробнее
    [snapback]88203" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    А что тут подробнее... тоже самое , В UI пользователя выдляет, копирует в буфер и скидывает в уже открытый Word документ, почти тоже самое что я показал
     
  8. Azrael

    Azrael Гость

    Наверное, можно ещё как-нибудь через DXL, только изврат будет жуткий.... быстро по крайней мере не выйдет точно, проще будет, проще 100к документов в ui открывать :)
     
  9. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    аха
    действительно работает долго

    и еще
    при работе агента
    если свернуть окно лотуса
    то выводится ошибка

    "Unable to find document window"

    :ph34r:
     
  10. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: yerke
    не ну нормальный - взял и убил UI документ... бездушный :ph34r: :D :D
     
  11. Sandr

    Sandr Гость

    Не дождешься результата это точно... Скорее получишь какую нить ошибку в виде НСД...

    Мой совет:
    Сотхраните свой док в формате РТФ. На бекэнде зачитываете из него данные и пишите в нужное Вам РТ поле, после чего сохраняете документ... Все будет значительно быстрее и корректней, чем серез буфер...
     
  12. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    включил агент
    и оставил на ночь

    утром прихожу
    ошибка типа "не могу сохранить файл"

    <!--QuoteBegin-Sandr+5:12:2007, 01:22 -->
    <span class="vbquote">(Sandr @ 5:12:2007, 01:22 )</span><!--QuoteEBegin-->Не дождешься результата это точно... Скорее получишь какую нить ошибку в виде НСД...
    [snapback]88374" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Sandr вы случайно Прорицательством не занимаетесь?
    :D

    <!--QuoteBegin-Sandr+5:12:2007, 01:22 -->
    <span class="vbquote">(Sandr @ 5:12:2007, 01:22 )</span><!--QuoteEBegin-->Сотхраните свой док в формате РТФ. На бекэнде зачитываете из него данные и пишите в нужное Вам РТ поле, после чего сохраняете документ... Все будет значительно быстрее и корректней, чем серез буфер...
    [snapback]88374" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    если есть другой надежный и быстрый способ
    то опишите про это подробнее
    заранее благодарен

    <!--QuoteBegin-Sandr+5:12:2007, 01:22 -->
    <span class="vbquote">(Sandr @ 5:12:2007, 01:22 )</span><!--QuoteEBegin-->Сотхраните свой док в формате РТФ. На бекэнде зачитываете из него данные и пишите в нужное Вам РТ поле
    [snapback]88374" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    мне надо наоборот
    из РТ поля в ворд
     
  13. Sandr

    Sandr Гость

    Ну так даже проще... пишите в РТ файл... что такое notesStream и РТ файл знаете? Теперь соедените это воединно...
     
  14. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    <!--QuoteBegin-Sandr+5:12:2007, 12:19 -->
    <span class="vbquote">(Sandr @ 5:12:2007, 12:19 )</span><!--QuoteEBegin-->Ну так даже проще... пишите в РТ файл... что такое notesStream и РТ файл знаете? Теперь соедените это воединно...


    [snapback]88413" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    дорогой Sandr
    придется еще раз спросить

    с помощью Call stream.WriteText("Moi Text")
    я могу написать текстовое значение в ртф файл

    а как написать
    то есть передать в байтах значения рт поля в файл
    с помощью метода Сall stream.Write(значение рт поля)

    как можно преобразовать в байты значение рт поля?
    (не имеется в виду CByte(expr))
     
  15. Sandr

    Sandr Гость

    Приду на работу, отрою то, что писал пару месяцев назад и напишу... :D
     
  16. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    ок спасибо большое
    :D

    буду ждать
     
  17. Sandr

    Sandr Гость

    Код (Text):
        Set stream = s.CreateStream 'поехали писать ртфайл
    If stream.Open(filepath) Then
    Call stream.Truncate 'в случае, если прошлый файл еще почему-то остался - очистим...
    Call stream.WriteText("{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset204{\*\fname Courier New;}Courier New CYR;}}")
    Call stream.WriteText("{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\lang1049\f0\fs20")

    tempString= rtitem.GetFormattedText(True, 0)
    tempString = Replace(tempString, Chr(13),"\par")

    Call stream.WriteText(tempString)
    Call stream.WriteText("}")
    Call stream.Close
    End If
    Этот кусочек должен Вам помочь.. Единственное что, надо посмотреть, как схавается microsoft equation... Возможно, что ничего и не выйдет...
     
  18. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    у меня код таков
    Код (Text):
    Sub Initialize
    Set ses=New NotesSession
    Set stream=ses.CreateStream
    '=
    If Dir("C:\Temp",16)="" Then Mkdir "C:\Temp"
    wdPath="C:\Temp\TESTS.RTF"
    '=
    If Not stream.Open(wdPath, "UTF-8") Then
    Messagebox "''"+wdPath+"''", , "Open failed"
    Exit Sub
    End If 
    If stream.IsReadOnly Then
    Messagebox "Close file ''"+wdPath+"''", , "File is read-only"
    Exit Sub
    End If
    If stream.Bytes <> 0 Then Call stream.Truncate
    'Call stream.Write()
    'Call stream.WriteText("әіңғ,.үұқөһьтиаит"+Chr(13))
    '=
    Set testdb=ses.GetDatabase("DominoServer/ORG", "base.nsf") 
    Set View = TestDB.GetView("TFRT")
    Set Nav=View.CreateViewNav
    Set Entry1=Nav.GetFirst
    If Entry1 Is Nothing Then
    Messagebox "Tests not found", , "Error"
    Exit Sub
    End If
    n=Cint(Entry1.SiblingCount)
    '=
    hwnd = NEMProgressBegin(NPB_TWOLINE)
    NEMProgressSetBarRange hwnd, n
    NemProgressSetText hwnd, "Подождите, пожалуйста. Идёт обработка данных….", ""  
    NEMProgressSetBarPos hwnd, 0
    '=
    '=********************************************************
    Dim ss As String
    Call stream.WriteText({<html><head><title></title>})                   
    ss=|<style>|+_
    +|body {font-size:8pt; font-family:"Tahoma";}|+_
    +|</style>|
    Call stream.WriteText(ss)                  
    Call stream.WriteText({</head><body>})                 
    '============================
    For i1=1 To Entry1.SiblingCount
    Call stream.WriteText("<b><center>"+Cstr(Entry1.ColumnValues(1))+"</center></b><br>")
    '=2
    Set Entry2=Nav.GetNext(Entry1)
    For i2=1 To Entry2.SiblingCount
    Set doc=entry2.Document
    If Not(doc Is Nothing) Then
    var=doc.GetItemValue("Question")
    Call stream.WriteText(Cstr(i2)+") "+var(0)+"<br>")                 
    End If
    '=3
    Set Entry3=Nav.GetNext(Entry2)
    For i3=1 To Entry3.SiblingCount
    If Not(Entry3 Is Nothing) Then
    If Cstr(Entry3.ColumnValues(0))="+" Then
    Set doc=entry3.Document
    If Not(doc Is Nothing) Then
    '=
    var=doc.GetItemValue("Variant")
    Call stream.WriteText("<i>")
    Call stream.WriteText("#"+Cstr(i3)+"# "+var(0)+"</i><br>")                                         
    '=
    End If                                                 
    End If
    End If
    If Not(Entry3 Is Nothing) Then Set Entry3=Nav.GetNextSibling(Entry3)               
    Next
    '=3
    Set Entry2=Nav.GetNextSibling(Entry2)
    Next       
    '=2
    NemProgressSetText hwnd, "Подождите, пожалуйста. Идёт обработка данных….", ""  
    NEMProgressSetBarPos hwnd, i1
    Set Entry1=Nav.GetNextSibling(Entry1)
    'If i1=4 Then Exit For
    Next
    '=************************
    Call stream.WriteText({</body></html>})                
    Call stream.Close
    '=
    NEMProgressSetBarPos hwnd, n
    NEMProgressEnd hwnd    
    '=
    Set wdApp = CreateObject("Word.Application")
    Call wdApp.Application.Documents.Open(wdPath)
    wdApp.ActiveWindow.View = 3
    wdApp.Application.Visible = True   
    %REM
    %END REM
    End Sub
    вопрос

    Код (Text):
    Call stream.WriteText("{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset204{\*\fname Courier New;}Courier New CYR;}}")
    Call stream.WriteText("{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\lang1049\f0\fs20")
    что именно делает?
     
  19. Sandr

    Sandr Гость

    Это заголовок РТ файла... Без него это будет обыкновенный текстовый файл...

    А Call stream.WriteText("}") заключающий тег РТ файла...
     
  20. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    я вот не пойму как
    значение рт поля перевести в байты и закинуть его в ртф с помощью Call stream.Write
    а не Call stream.WriteText
     
Загрузка...

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