Lotus и Word

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

  1. Гость

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

    А в 2003 все ок..
     
  2. Klido

    Klido Гость

  3. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.080
    Симпатии:
    300
    всё это хорошо..., но...

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

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

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

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    Виктор
    формируйте XML файл и открывайте его вордом
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.080
    Симпатии:
    300
    ToxaRat
    поддерживаю!
     
  6. Гость

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    "ниочем"
    xml - это что, новый формат word-документа?
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.080
    Симпатии:
    300
    почти :) http://www.javaworld.com/cgi-bin/mailto/x_...mp;site=jw_core
    и я не считаю что создать ХМЛ сложнее, чем ворочать МСО пердуляторами :)
     
  9. Klido

    Klido Гость

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.080
    Симпатии:
    300
    мы говорим про готовый док или про "выгрузку"
    выгрузка (как я себе это понимаю) - создание дока...

    работать с готовым вордом (именно 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
     
  11. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    как по мне XML
    является самым правильным решением, всё сводится к наполнению простенького текстового файла, в считаные секунды чем создание обьекта и его программирование, которое может длиться минутами да еще и слететь, если команд будет передано через КОМ слишком много
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.080
    Симпатии:
    300
  13. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    нет, ну в тебе-то я и не сомневаюсь )) я, кстати, тоже считаю, что это где-то односложные задачи, особенно, если знать обе технологии и требования к результату.
    я лишь раскритиковал глубокопознавательный пост уважаемого товарища Тохи :welcome:
    это похоже на "я не знаю, но крепко уверен". с формированием XML может случится множество забавных приключений, особенно когда дело заходит в использование всяких спец символов, которые совпадают с спец символами XML.
    да, XML сильная штука, но его сила в его же сложности.
    а "создание объекта и его программирование" длится обычно не дольше создания XML текстового файла, тем более, это ворд, а не эксель с кучей формул и преобразований больших объемов данных.

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

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    умничаем да? :welcome:
    сколько не формировал XML вот ни разу не удалось напороться на спец символы, наверно не такой умный и уверенный как ВЫ ;)
     
  15. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ну чего ты мне все Выкаешь? в морду дать хочешь, что ли? ))
    может, я не такой умный, но у меня проблемы были. с отчетами под веб игрался. вот только не могу вспомнить, что именно вылазяло - давно было.
     
  16. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    " & < скорее всего. не смертельно было, но что-то было...
    Ребята не ссорьтесь)))
     
  17. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    Akupaka
    всё это я к тому, что в ЛотусАнализаторе я тоже узаю DXML и как то выгружая целые комплекты баз я ни разу не напоролся на спец символы, в датовых полях их нету, в числовых тоже в текстовых они обычно еще в марке CDATA помещаются
    XML весьма грамотная структура, чтобы вот так просто накосячить, другое дело если вы делаете XML самостоятельно, вот тогда да :)
     
  18. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    XML не самая простая "структура", и имея небольшой опыт его использования, можно косяков наловить уйму!
     
  19. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.080
    Симпатии:
    300
    для общей информации по теме (так - вспомнилось)...
    многие граблеходцы КОМа базируются на создании "полей" (так называемых) в ворде...
    ограничения:
    - невозможность одинакового названия (а такая необходимость часто возникает)
    - проблемы с типами, при попытке заполнять их из нотусов, вокэраунд - реплэйсить букмарки, к кот. они относятся)
    - при реплэйсах букмарков - слетают стили, вокэраунд - установка пробела перед полем и задание такогоже стиля, вместе с полем

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

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

    ну и ф-ции, набросал (в т.ч. исполльзуя код Андрея http://www.notesnet.ru/library/docid/5E77A5 , в букмарках и константах):
    - получение списка букмарков (полей, в нашем контексте)
    Код (Text):
    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
    - получение списка шаблонов текста, есть тонкость - колапс, без него зацикливает ворд, даже в нативном вордвасике, в табличных параграфах:
    Код (Text):
    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
    - реплейс по шаблонам, тоже с "толстостью" - замена ср-вами ворда (иначе - медленно):
    Код (Text):
    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

    ну и экзампелы пользования (обратите внимание на "толстость" экранирования брэкетов - потому как они служебные в ворде):
    - получение списка шаблонов:
    Код (Text):
    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
    - замены, по шаблону
    Код (Text):
    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
     
  20. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    и я букмаки юзал, как-то поля не впечатлили или не поддались пониманию, не помню, и имена у них ограничены по длинне...
     
Загрузка...

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