Часть полного текста документа:Документация на основе RTF-шаблона Александр Харьков, "Комиздат" Разработка прикладного ПО - это, как известно, не только написание кода программ, но и проектирование печатных документов и отчетов. Практически все интегрированные среды имеют в своем составе генераторы отчетов, в той или иной степени помогающие решить эту задачу. Однако, несмотря на явные достоинства, использование генераторов отчетов имеет ряд недостатков. Они сводятся, главным образом, к невозможности вносить правки в сформированный документ, а также изменять шаблоны отчета привычными средствами, например обычным текстовым редактором. До последнего времени самым простым и широко применяемым решением представлялось применение механизма OLE. Например, для комбинации Word и VisualBasic возможна такая схема: Создаем некий файл - шаблон документа. Там, где должна быть "шапка" (дата, номер документа и др.), используем закладки, а для основной части отчета создаем таблицу-заготовку соответствующей структуры. Пример такого шаблона приведен на рис. 1. Пишем программу с использованием объектной модели Word: ' NumStr - кол-во строк в отчете ' NewData (5,NumStr) - массив с данными для заполнения ' таблицы, заранее приведенными к символьному виду ' Itog - сумма, приведенная к символьному виду ' Pth - путь к исходному файлу ' Str_ndoc = "BS190" ' Str_name = "Петров И.И." ................. Dim objWord As Word.Application Dim objDoc As Word.Document Dim objTable As Word.Table ' создаем объект Word Set objWord = New Word.Application ' делаем его видимым - это не обязательно, ' но очень интересно :) objWord.Visible = True ' открываем файл шаблона Set objDoc = objWord.Documents.Open (Pth) ' делаем его активным objDoc.Activate ' заполняем "шапку документа" - номер и получатель ' - закладки 'ndoc' и 'name' соответственно objDoc.Bookmarks ("ndoc").Range.Text = Str_ndoc objDoc.Bookmarks ("name").Range.Text = Str_name ' связывам объект с таблицей Set objTable = objWord.ActiveDocument.Tables (1) ' выделяем 2-ю строку таблицы в шаблоне objTable.Cell (2, 1).Range.Select ' вставляем нужное кол-во строк-1 ' (т.к. одна уже есть в шаблоне) If NumStr > 0 Then objWord.Selection.InsertRows (NumStr - 1) ' для каждой строки в каждую ячейку вставляем нужные ' данные из массива For i = 1 To NumStr For j = 1 To 5 objTable.Cell (i + 1, j).Range.Text = NewData (j, i) Next j Next i ' проставляем сумму "Всего" objTable.Cell (NumStr + 2, 5).Range.Text = Itog Запускаем ее в составе всего приложения и получаем результат (см. рис. 2). Пользователь, получив отчет в виде doc-файла, может легко внести в документ любые изменения, отправить его по электронной почте, распечатать - одним словом, распорядиться по своему усмотрению в привычной ему среде. Так же легко он может изменить и шаблон документа - для этого достаточно уметь работать в текстовом редакторе. Но эту идиллическую картину омрачает несколько неприятных моментов. Во-первых, недостаточная гибкость приложения - если вы захотите перейти на другой редактор, то придется писать код заново. ............ |