Средства разработки приложений


Заполнение ячейки таблицы


Представим, что требуется найти k-ю ячейку в m-й строке n-й таблицы и вставить в нее текстовую строку данных. Пример таких ячеек:

...{\lang1033\cgrid0<содержимое 1-й ячейки>
\cell<содержимое 2-й ячейки>\cell}…

Задача может быть решена по следующему алгоритму.

  • Читаем последовательно строки входного файла.
  • Ищем последовательность …\row…\pard…\par…\intbl… (не обязательно в одной строке) (n-1) раз. После этого мы находимся перед нужной нам таблицей.
  • Ищем тег \row (m-1) раз. После этого мы находимся в начале нужной строки таблицы.
  • Ищем k-e вхождение тега \cell.
  • Вставляем перед ним строку данных.

Данный алгоритм реализован в виде функции In_Tcell1(pth As String, itbl As Integer, irow As Integer, icell As Integer, ndata As String), где pth - имя RTF-файла, itbl - номер таблицы, irow - номер строки, icell - номер ячейки, data - строка для занесения в ячейку.

Программа на VisualBasic, демонстрирующая применение такой технологии и функционально идентичная программе, приведенной в начале этой статьи, выглядит так:

' NumStr - кол-во строк в отчете
' NewData (5,NumStr) - массив с данными для заполнения
' таблицы, заранее приведенными к символьному виду
' Itog - сумма, приведенная к символьному виду
' pth - путь к файлу
' Str_ndoc = "BS190"
' Str_name = "Петров И.И."

Dim res As Boolean ' результат выполнения функций

' заполняем "шапку документа" - номер и получатель
' - закладки 'ndoc' и 'name' соответственно

res = In_Zakl1(pth, "ndoc", Str_ndoc)
res = In_Zakl1(pth, "name", Str_name)

' вставляем нужное кол-во строк-1
' (т.к. одна уже есть в шаблоне)
res = In_TStr (pth, 1, 2, NumStr - 1)

' для каждой строки в каждую ячейку вставляем
' нужные данные из массива

For i = 1 To NumStr
For j = 1 To 5
res = In_Tcell1(pth, 1, i + 1, j, NewData (j, i))
Next j
Next i

res = In_Tcell1(pth, 1, NumStr + 2, 5, Itog)
' проставляем сумму "Всего"



Начало  Назад  Вперед



Книжный магазин