Richtext To Word

yerke

Well-known member
28.08.2007
392
0
#1
Привет всем
Подскажите пожалуйста

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

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

morpheus

скриптописец
07.08.2006
3 915
1
#2
Для: yerke
Когдато ктото выкладывал тут базку с переносом рт поля в ворд... надо поискать

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

yerke

Well-known member
28.08.2007
392
0
#3
p.s.
richtext поле может содержать текст и объект microsoft equation
 

morpheus

скриптописец
07.08.2006
3 915
1
#4
Для: yerke
а там если не ошибаюсь используетсья буфер обмена, так что пробуйте
 
A

Azrael

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

yerke

Well-known member
28.08.2007
392
0
#6
<!--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]

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

morpheus

скриптописец
07.08.2006
3 915
1
#7
<!--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 документ, почти тоже самое что я показал
 
A

Azrael

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

yerke

Well-known member
28.08.2007
392
0
#9
аха
действительно работает долго

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

"Unable to find document window"

:ph34r:
 

morpheus

скриптописец
07.08.2006
3 915
1
#10
Для: yerke
не ну нормальный - взял и убил UI документ... бездушный :ph34r: :D :D
 
S

Sandr

#11
ВОПРОС
у меня около 100 000 документов
не будет ли работать агент ОООООчень долга когда открывает и закрывает все эти доки
в уи
Не дождешься результата это точно... Скорее получишь какую нить ошибку в виде НСД...

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

yerke

Well-known member
28.08.2007
392
0
#12
включил агент
и оставил на ночь

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

<!--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]
мне надо наоборот
из РТ поля в ворд
 
S

Sandr

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

yerke

Well-known member
28.08.2007
392
0
#14
<!--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))
 
S

Sandr

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

Sandr

#17
Код:
	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... Возможно, что ничего и не выйдет...
 

yerke

Well-known member
28.08.2007
392
0
#18
у меня код таков
Код:
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
вопрос

Код:
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")
что именно делает?
 
S

Sandr

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

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

yerke

Well-known member
28.08.2007
392
0
#20
я вот не пойму как
значение рт поля перевести в байты и закинуть его в ртф с помощью Call stream.Write
а не Call stream.WriteText