Richtext + Table

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

  1. NFKF

    NFKF Гость

    Доброго времени суток.

    Поделитесь, плиз, опытом работы рисования таблицы в RichText

    Собственно говоря таблица рисуется при помощи AppendTable

    Непонятно только как:

    1. Объединять ячейки
    2. Менять цвет бордеров
    3. Сделать заливку градиентной
     
  2. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Если я не ошибаюсь, то на все запросы - один ответ: никак.
    Хотя цвет бордеров вроде можно было менять.
     
  3. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    правильнее - не использовать глюкоклассы :)
    и юзать ДХЛ
    есть ещё майм и хтмл...
    всё зависит от цели
    но может оказаться (а чаще всего - именно оказывается) - не заморачиваться на бантики ;)
     
  4. NFKF

    NFKF Гость

    Сорри, а как ДХЛ юзать в смысле рисования таблицы?
     
  5. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Если размер таблицы не очень большой (до 32к), можно создать скрытое поле с хтмл-таблицей и компутед текст, в формуле которого указано это поле. Данная реализация позволит решить п.1. Примитивная хтмл-таблица:
    <TABLE>
    <TR><TH>Заголовок 1</TH><TH>Заголовок 2</TH></TR>
    <TR><TD>Значение 1</TH><TD>Значение 2</TH></TR>
    </TABLE>
     
  6. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    А ты сделай док с нужной тебе талицей, экспортни его, посмотри стркутуру таблицы.
    Тебе надо сделать такую же через, например, DOMParser и запихнуть обратно в базу через DXLImporter.
     
  7. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    Всем привет. Старая тема, но вопрос появился насчет рисования таблицы. У меня есть старая база, в ней кое какая информация отображается в виде таблицы, которое хранится в richtext поле. Код такой
    Код (Text):
    Set body = document.GetFirstItem("ListVisitorTable")
    Set rtnav = body.CreateNavigator
    Call body.AppendTable(rowCount, columnCount)
    Call rtnav.FindFirstElement(RTELEM_TYPE_TABLECELL)
     
    'Fill header
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(boldStyle)
    Call body.AppendText("Келушінің аты-жөнi")
    Call body.AddNewline(1)
    Call body.AppendText("(ФИО посетителя)")
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
     
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(boldStyle)
    Call body.AppendText("Құжаттың нөмері/сериясы")
    Call body.AddNewline(1)
    Call body.AppendText("(Номер/серия документа)")
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
     
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(boldStyle)
    Call body.AppendText("Құжаттың түрi")
    Call body.AddNewline(1)
    Call body.AppendText("(Вид документа)")
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
     
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(boldStyle)
    Call body.AppendText("Келушiнiң жұмыс орны")
    Call body.AddNewline(1)
    Call body.AppendText("(Место работы посетителя)")
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
     
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(boldStyle)
    Call body.AppendText("Кәсiпорынның түрi")
    Call body.AddNewline(1)
    Call body.AppendText("(Вид предприятия)")
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
     
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(boldStyle)
    Call body.AppendText("Ескертпе")
    Call body.AddNewline(1)
    Call body.AppendText("(Примечание)")
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
     
    'Fill body
    ForAll v In Visitors
    If Not v.isDeleted Then
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(boldStyle)
    Call body.AppendText(v.visitorName)
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
     
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(commonStyle)
    Call body.AppendText(v.visitorDocumentNumber)
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
     
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(commonStyle)
    Call body.AppendText(v.visitorDocumentType)
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
     
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(commonStyle)
    Call body.AppendText(v.visitorWorkName)
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
     
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(commonStyle)
    Call body.AppendText(v.visitorWorkKind)
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
     
    Call body.BeginInsert(rtnav)
    Call body.AppendStyle(commonStyle)
    Call body.AppendText("с " + v.visitorFromDate)
    Call body.AddNewline(1)
    Call body.AppendText("по " + v.visitorToDate)
    Call body.AddNewline(1)
    Call body.AppendText("с " + v.visitorFromTime)
    Call body.AddNewline(1)
    Call body.AppendText("до " + v.visitorToTime)
    Call body.EndInsert
    Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
    End If
    End ForAll
    Call body.Update
    Таблицу добавляет(рисунок 1.png), но иногда в документе она отображается криво (рисунок 2.png)
    Раньше это код выполнялся в открытом документе (notesuidocument использовался), теперь же я сохраняю таблицу работая с документом в агенте

    Да кстати еще, раньше richtext в свойствах документа отображался как один элемент, теперь же он делится на большое количество полей
     

    Вложения:

    • 1.png
      1.png
      Размер файла:
      17,2 КБ
      Просмотров:
      26
    • 2.png
      2.png
      Размер файла:
      19,5 КБ
      Просмотров:
      28
  8. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    А в чём вопрос?
     
  9. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    вопрос был в том:

    и еще

    почему так происходит? Ведь раньше отрабатывал тот же самый код, и все было в норме
     
  10. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    562
    Симпатии:
    214
    1 Приведённый код или не корректный или это только часть: не вижу формирование таблицы из rowCount, columnCount.
    Так в таблице получается только одна ячейка с результатом, как на втором скрине. (rtnav должен был бы ошибку выдать, по идее).
    Если в rtitem уже была таблица с нужным кол-вом строк\столбцов, результат будет, как на первом скрине.
    2 Параграф в rtitem не может быть больше 64К. Если наполнение rtitem больше - item "размножается".
    3 Если надо "по честному" вычистить rtitem (удалить все не нужные item(0) ... item(n)) - надо его удалить из дока и создать заново ( ... = "" не прокатит \если там не только текст\, а новое содержание добавится к старому, хотя старое уже не будет видно).
     
  11. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    Поле, в котором содержится таблица, удаляется и создается заново

    Call body.Remove()
    Set body = document.CreateRichTextItem("ListVisitorTable")

    1. Разве не это формирование таблицы заданных размеров?
    Set body = document.GetFirstItem("ListVisitorTable")
    Set rtnav = body.CreateNavigator
    Call body.AppendTable(rowCount, columnCount)
    2 Это верно, но вся таблица не больше 64К получается
    3 Когда добавляем какие то значения, все поле удаляем и добавляем всю таблицу заново

    В общем такая вот задача, у меня есть класс с параметрами, затем переменная List As MyClass, я заполняю эту переменную и затем ForAll загоняю все данные в таблицу в поле ListVisitorTable. В принципе я весь код показал. А как вы, @alexas1 бы ее формировали?
     
  12. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    Все таки по теме вопросы появляются.
    Покажите, как правильно таблицу в рич текст положить. Задача у меня немного усложнилась, теперь мне придется две таблицы делать, так как нужно в зависимости от роли пользователя показывать нужную ему таблицу (первая таблица сокращенный вариант, вторая - расширенный)
     
  13. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    770
    Симпатии:
    50
    См. NotesRichTextTable не забываем использовать стили и помним про ограничение в 255 (или 256) строк.
    На счёт двух таблиц - удобнее использовать два разных поля с Hide Formula.

    Могу предложить альтернативный вариант - не делать RTF таблицу в форме вообще, а по кнопке формировать HTML файл с таблицей нужного содержимого в зависимости от роли пользователя и открывать его в браузере.
     
  14. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    562
    Симпатии:
    214
    И помнить, что RTF "просто так" не скрывается - поле надо класть, напр. в tabbedTable или в секцию. И, соответственно, скрывать таб\секцию. Кста, леер тоже поможет.
    И таблицу-шаблон лучше сформировать заранее (шапку и первую строку), потом её только копировать в поле и добавлять строки. Гарантированно не разбежится вёрстка да и оформление сделать проще.
    Я делал документ, где хранил разновсяческие таблицы (или части) для конкретной базы. Оттуда и дёргал.
    Так можно строить (из частей) оч. сложные и красивые РТ таблицы. Только, при заполнении, надо врубиться, как нотус нумерует ячейки во вложенных (nested) таблицах. Ну, это не сложно.
    ЗЫ
    "Чистить" РТФ с таблицей - удалением поля и созданием его заново.
     
    #14 alexas1, 27 авг 2015
    Последнее редактирование модератором: 27 авг 2015
  15. ToxaRat

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    рисуем в DXML и импортим/экспортим - полный контроль, создание меток, замена и всё в стринге
     
Загрузка...

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