Richtext + Table

  • Автор темы NFKF
  • Дата начала
N

NFKF

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

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

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

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

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

Omh

Lotus team
04.07.2007
2 210
1
#2
Если я не ошибаюсь, то на все запросы - один ответ: никак.
Хотя цвет бордеров вроде можно было менять.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 569
263
#3
правильнее - не использовать глюкоклассы :)
и юзать ДХЛ
есть ещё майм и хтмл...
всё зависит от цели
но может оказаться (а чаще всего - именно оказывается) - не заморачиваться на бантики ;)
 
N

NFKF

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

nvyush

Lotus team
22.04.2009
2 317
0
#5
Если размер таблицы не очень большой (до 32к), можно создать скрытое поле с хтмл-таблицей и компутед текст, в формуле которого указано это поле. Данная реализация позволит решить п.1. Примитивная хтмл-таблица:
<TABLE>
<TR><TH>Заголовок 1</TH><TH>Заголовок 2</TH></TR>
<TR><TD>Значение 1</TH><TD>Значение 2</TH></TR>
</TABLE>
 

Omh

Lotus team
04.07.2007
2 210
1
#6
Сорри, а как ДХЛ юзать в смысле рисования таблицы?
А ты сделай док с нужной тебе талицей, экспортни его, посмотри стркутуру таблицы.
Тебе надо сделать такую же через, например, DOMParser и запихнуть обратно в базу через DXLImporter.
 

proteam

Well-known member
02.03.2012
144
1
#7
Всем привет. Старая тема, но вопрос появился насчет рисования таблицы. У меня есть старая база, в ней кое какая информация отображается в виде таблицы, которое хранится в richtext поле. Код такой
Код:
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 в свойствах документа отображался как один элемент, теперь же он делится на большое количество полей
 

Вложения

  • 17.2 КБ Просмотры: 26
  • 19.5 КБ Просмотры: 28

proteam

Well-known member
02.03.2012
144
1
#9
вопрос был в том:

Таблицу добавляет(рисунок 1.png), но иногда в документе она отображается криво (рисунок 2.png)
и еще

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

alexas1

Lotus team
10.04.2014
723
144
#10
1 Приведённый код или не корректный или это только часть: не вижу формирование таблицы из rowCount, columnCount.
Так в таблице получается только одна ячейка с результатом, как на втором скрине. (rtnav должен был бы ошибку выдать, по идее).
Если в rtitem уже была таблица с нужным кол-вом строк\столбцов, результат будет, как на первом скрине.
2 Параграф в rtitem не может быть больше 64К. Если наполнение rtitem больше - item "размножается".
3 Если надо "по честному" вычистить rtitem (удалить все не нужные item(0) ... item(n)) - надо его удалить из дока и создать заново ( ... = "" не прокатит \если там не только текст\, а новое содержание добавится к старому, хотя старое уже не будет видно).
 

proteam

Well-known member
02.03.2012
144
1
#11
Поле, в котором содержится таблица, удаляется и создается заново

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 бы ее формировали?
 

proteam

Well-known member
02.03.2012
144
1
#12
Все таки по теме вопросы появляются.
Покажите, как правильно таблицу в рич текст положить. Задача у меня немного усложнилась, теперь мне придется две таблицы делать, так как нужно в зависимости от роли пользователя показывать нужную ему таблицу (первая таблица сокращенный вариант, вторая - расширенный)
 

garrick

Lotus team
26.10.2009
894
61
#13
См.
Для просмотра контента необходимо: Войти или зарегистрироваться
не забываем использовать стили и помним про ограничение в 255 (или 256) строк.
На счёт двух таблиц - удобнее использовать два разных поля с Hide Formula.

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

alexas1

Lotus team
10.04.2014
723
144
#14
На счёт двух таблиц - удобнее использовать два разных поля с Hide Formula.
И помнить, что RTF "просто так" не скрывается - поле надо класть, напр. в tabbedTable или в секцию. И, соответственно, скрывать таб\секцию. Кста, леер тоже поможет.
И таблицу-шаблон лучше сформировать заранее (шапку и первую строку), потом её только копировать в поле и добавлять строки. Гарантированно не разбежится вёрстка да и оформление сделать проще.
Я делал документ, где хранил разновсяческие таблицы (или части) для конкретной базы. Оттуда и дёргал.
Так можно строить (из частей) оч. сложные и красивые РТ таблицы. Только, при заполнении, надо врубиться, как нотус нумерует ячейки во вложенных (nested) таблицах. Ну, это не сложно.
ЗЫ
"Чистить" РТФ с таблицей - удалением поля и созданием его заново.
 
Последнее редактирование модератором:

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#15
рисуем в DXML и импортим/экспортим - полный контроль, создание меток, замена и всё в стринге