Richtext + Table

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

NFKF

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

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

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

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

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

Omh

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
473
правильнее - не использовать глюкоклассы :)
и юзать ДХЛ
есть ещё майм и хтмл...
всё зависит от цели
но может оказаться (а чаще всего - именно оказывается) - не заморачиваться на бантики ;)
 
N

NFKF

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

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

nvyush

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

Omh

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

proteam

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

Вложения

  • 1.png
    1.png
    7,7 КБ · Просмотры: 185
  • 2.png
    2.png
    6,3 КБ · Просмотры: 468
P

proteam

вопрос был в том:

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

и еще

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

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

alexas1

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

proteam

Поле, в котором содержится таблица, удаляется и создается заново

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

proteam

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

garrick

Lotus Team
26.10.2009
1 367
152
BIT
364
См. link removed не забываем использовать стили и помним про ограничение в 255 (или 256) строк.
На счёт двух таблиц - удобнее использовать два разных поля с Hide Formula.

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

alexas1

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

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
рисуем в DXML и импортим/экспортим - полный контроль, создание меток, замена и всё в стринге
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!