Lotus и Word

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Добрый день.
Подскажите. Поддерживает Лотус 8.5.1 Выгрузку данных в Word 7??. Не в какую не хочет выгружать((((. Может какие нибудь патчи есть? :)

А в 2003 все ок..
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#3
всё это хорошо..., но...

и это не использование Lotus Script :) - это использование КОМ из под лотус скрипт
добавим сюда глюки, необходимость МСО, низкую скорость работы...

существуют инструменты работы как с ОпенХМЛ (раз уж про МСО), так и с WordML... - в этих случаях можно обойтись спеками, готовыми инструментами (без МСО)

и сравнение 8.5.1 и 2003, в кот. "всё ок" - мну повергло в шок
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#4
Виктор
формируйте XML файл и открывайте его вордом
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#5
ToxaRat
поддерживаю!
 
G

Guest

#6
Программно.. Благодарю, ссылка очень помогла
 
K

Klido

#9
lmike
а ты приведи пример кода 1 и кода 2 для обоих случаев - открытие ворда и запись туда пары полей дока лотуса - и сравним на "простоту" :)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#10
мы говорим про готовый док или про "выгрузку"
выгрузка (как я себе это понимаю) - создание дока...

работать с готовым вордом (именно doc), на сегодня, можно http://www.aspose.com/categories/java-comp...va/default.aspx - 3к грина
или полный (все офисные форматы)
http://www.aspose.com/categories/java-comp...va/default.aspx - 6к
цены на неограниченное! кол-во деплойментов

ну и отступление по цене :)
на 100 человек юзеров - выйдет гораздо дешевле МСО :) http://www.lensoftware.ru/category_14.html
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#11
как по мне XML
является самым правильным решением, всё сводится к наполнению простенького текстового файла, в считаные секунды чем создание обьекта и его программирование, которое может длиться минутами да еще и слететь, если команд будет передано через КОМ слишком много
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#13
почти... и я не считаю что создать ХМЛ сложнее, чем ворочать МСО пердуляторами
нет, ну в тебе-то я и не сомневаюсь )) я, кстати, тоже считаю, что это где-то односложные задачи, особенно, если знать обе технологии и требования к результату.
я лишь раскритиковал глубокопознавательный пост уважаемого товарища Тохи :welcome:
как по мне XML является самым правильным решением, всё сводится к наполнению простенького текстового файла, в считаные секунды чем создание обьекта и его программирование, которое может длиться минутами да еще и слететь, если команд будет передано через КОМ слишком много
это похоже на "я не знаю, но крепко уверен". с формированием XML может случится множество забавных приключений, особенно когда дело заходит в использование всяких спец символов, которые совпадают с спец символами XML.
да, XML сильная штука, но его сила в его же сложности.
а "создание объекта и его программирование" длится обычно не дольше создания XML текстового файла, тем более, это ворд, а не эксель с кучей формул и преобразований больших объемов данных.

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

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#14
это похоже на "я не знаю, но крепко уверен". с формированием XML может случится множество забавных приключений, особенно когда дело заходит в использование всяких спец символов, которые совпадают с спец символами XML.
умничаем да? :welcome:
сколько не формировал XML вот ни разу не удалось напороться на спец символы, наверно не такой умный и уверенный как ВЫ ;)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#15
сколько не формировал XML вот ни разу не удалось напороться на спец символы, наверно не такой умный и уверенный как ВЫ
ну чего ты мне все Выкаешь? в морду дать хочешь, что ли? ))
может, я не такой умный, но у меня проблемы были. с отчетами под веб игрался. вот только не могу вспомнить, что именно вылазяло - давно было.
 

hosm

* so what *
18.05.2009
2 442
6
#16
" & < скорее всего. не смертельно было, но что-то было...
Ребята не ссорьтесь)))
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#17
Akupaka
всё это я к тому, что в ЛотусАнализаторе я тоже узаю DXML и как то выгружая целые комплекты баз я ни разу не напоролся на спец символы, в датовых полях их нету, в числовых тоже в текстовых они обычно еще в марке CDATA помещаются
XML весьма грамотная структура, чтобы вот так просто накосячить, другое дело если вы делаете XML самостоятельно, вот тогда да :)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#19
для общей информации по теме (так - вспомнилось)...
многие граблеходцы КОМа базируются на создании "полей" (так называемых) в ворде...
ограничения:
- невозможность одинакового названия (а такая необходимость часто возникает)
- проблемы с типами, при попытке заполнять их из нотусов, вокэраунд - реплэйсить букмарки, к кот. они относятся)
- при реплэйсах букмарков - слетают стили, вокэраунд - установка пробела перед полем и задание такогоже стиля, вместе с полем

при часто повторяющихся, одинаковых данных, всё это превращается в гимор неописуемый (чего стоит только создание полей)
вощем - МСО, со всеми удобствами ;)
Вот у меня есть контракт с необходимостью >300! замен, при уникальных ок 20...

ну и вытекающие вокэраунды:
- в существующих шаблонах заменить все поля (букмарки) на шаблон текста, типа <Field_Name_Client>, например - в таких брэкетах
- использовать (если уж КОМ) замену текста
- ну и напряжённо думать про уход от ворда к ХМЛ ;)

ну и ф-ции, набросал (в т.ч. исполльзуя код Андрея http://www.notesnet.ru/library/docid/5E77A5 , в букмарках и константах):
- получение списка букмарков (полей, в нашем контексте)
Код:
Function GetBookmarks(worddoc As Variant, bookmarks List As String) As Boolean
Erase bookmarks
Dim bmkName As String, bmkText As String
On Error Goto ErrorHandler
Forall mark In worddoc.Bookmarks
On Error Goto WrongMark
bmkName=mark.Name
worddoc.Application.Selection.GoTo wdGoToBookmark, , , bmkName
bmkText=worddoc.Application.Selection.Text
On Error Goto ErrorHandler
bookmarks(bmkName)=bmkText
Goto nxt
WrongMark:
Resume nxt
nxt:
End Forall
GetBookmarks=True
ExitFunctoin:
Exit Function
ErrorHandler:
Call RaiseError()
Erase bookmarks
Resume ExitFunctoin
End Function
- получение списка шаблонов текста, есть тонкость - колапс, без него зацикливает ворд, даже в нативном вордвасике, в табличных параграфах:
Код:
Function GetListByTemplate(worddoc As Variant, template As String, textlist List As String) As Boolean
Erase textlist
On Error Goto ErrorHandler
Dim wObj As Variant
Dim rngToSearch As Variant
Dim rngResult As Variant
Dim i As Integer
Dim s As String

Set wObj = worddoc.Application
Set rngToSearch = worddoc.Content
Set rngResult = rngToSearch.Duplicate
'.Text = ""
rngResult.Find.Text = template '"\<*\>"
rngResult.Find.Forward = True
rngResult.Find.Wrap = wdFindStop
rngResult.Find.MatchCase = False
rngResult.Find.MatchWildcards = True
Do While rngResult.Find.Execute()
'	rngResult.Find.Execute , MatchWildcards:=True, Forward:=True
'	If Not rngResult.Find.Found Then Exit Do
i = i + 1
rngResult.Select
s = worddoc.Application.Selection.Text
rngResult.Collapse 0 'wdCollapseEnd
textList(s)=""
'rngResult.Start = rngResult.Start + Len(s)
'rngResult.End = rngResult.Start + 20
'rngResult.Select
's = worddoc.Application.Selection.Text
'and extending the end of rngResult
'	rngResult.End = rngToSearch.End
'Loop Until Not rngResult.Find.Found
Loop
Print "Occurance#"+Cstr(i)
GetListByTemplate=True
ExitFunctoin:
Exit Function
ErrorHandler:
Call RaiseError()
Erase textlist
Resume ExitFunctoin	
End Function
- реплейс по шаблонам, тоже с "толстостью" - замена ср-вами ворда (иначе - медленно):
Код:
Function ReplaceByTemplate(replacementList List As String, worddoc As Variant) As Boolean
On Error Goto ErrorHandler
Dim wObj As Variant
Dim rngToSearch As Variant
Dim rngResult As Variant
Dim i As Integer
Dim s As String

Set wObj = worddoc.Application
Set rngToSearch = worddoc.Content
Forall m In replacementList
i=0
Set rngResult = rngToSearch.Duplicate
rngResult.Find.Text = Listtag(m)
rngResult.Find.Forward = True
rngResult.Find.Wrap = wdFindStop
rngResult.Find.MatchCase = False
rngResult.Find.MatchWildcards = True
rngResult.Find.Replacement.Text=m
rngResult.Find.Execute ,,,,,,,,,,wdReplaceAll
'		Do While rngResult.Find.Execute()
'			i = i + 1
'			rngResult.Select
'			worddoc.Application.Selection.Text=m
'			rngResult.Collapse 0 'wdCollapseEnd
'		Loop
Print {Значение:}Listtag(m) ' & ", #"+Cstr(i)		
End Forall

ReplaceByTemplate=True
ExitFunctoin:
Exit Function
ErrorHandler:
Call RaiseError()
Resume ExitFunctoin	
End Function

ну и экзампелы пользования (обратите внимание на "толстость" экранирования брэкетов - потому как они служебные в ворде):
- получение списка шаблонов:
Код:
Sub Initialize
Dim textlist List As String
Dim worddoc As Variant
Set worddoc=GetWordDocumentObject("c:\test.doc")
Call GetListByTemplate(worddoc, "\<*\>",textlist)
Debug=True
Dim i As Integer
Forall m In textList
i=i+1
End Forall
DbgMsg("Unique strings#"+Cstr(i))
End Sub
- замены, по шаблону
Код:
Sub Initialize
Dim textlist List As String
Dim worddoc As Variant
Set worddoc=GetWordDocumentObject("c:\test.doc")
textList({\<Сетра\>})={[Форма1]}
textList({\<Сетры\>})={[Форма2]}
textList({\<Сетре\>})={[Форма3]}
Call ReplaceByTemplate(textlist, worddoc)
End Sub
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#20
и я букмаки юзал, как-то поля не впечатлили или не поддались пониманию, не помню, и имена у них ограничены по длинне...