В практических приложениях автор обнаружил, что содержимое отчета меняется редко, но его формат шрифта и макет часто меняются, и иногда пользователи не хотят изменять фактическое содержимое базы данных, но хотят изменить содержимое отчета для определенных нужд. Если вы используете ReportSmith, вы можете решить первую проблему, но со второй ничего не можете поделать, а ее интерфейс на английском языке, что не подходит для пользователей. Если вы используете компонент отчета TQReport в версии 3.0, ни один из них не может быть решен в реальном времени, и исходный код необходимо изменить и перекомпилировать, прежде чем его можно будет использовать. Использование Word и Excel позволяет полностью устранить вышеуказанные недостатки. Конкретная реализация выглядит следующим образом (на примере реализации Word):
Сначала используйте Word, чтобы отредактировать формат отчета, разметить формат, заменить элементы данных, которые будут выводиться, полями формы и присвоить им имена. Здесь мы временно предполагаем, что есть поля формы Item1 и Item2 (оба текстового типа), сохраняем этот документ как файл шаблона example.dot, а затем действуем следующим образом:
1) Запустите Delphi3, добавьте компонент TDdeClientCov в системный компонент, для которого установлено значение Form1, назовите его DdeExample, установите для параметра ConnectMode значение ddeManual (ручной режим); установите для DdeService значение «(WinWord)»; установите для Serviceapplication значение «WinWord».
2) Напишите собственный процесс активации Word следующим образом:
PROcedure Tform1.WordActive(Cmds: TStrings);
вар
WordPath: Строка;
начинать
if(not DdeExample.OpenLink) then {определить, является ли он динамически связанным}
начинать
если(FindWindow('OpusApp', ноль)=0) тогда
начинать
WordPath := 'C:msofficewinword';
если(WordPath=') тогда
ShowMessage('Китайский Word не установлен или не указан путь, пожалуйста, установите и установите китайскую версию Word.')
еще начать
DdeExample.ServiceApplication := WordPath+'Winword.exe';
if(DdeExample.OpenLink) then {если макрокоманда была динамически связана}
DdeExample.ExecuteMacroLines(Cmds,False)
еще
ShowMessage('Невозможно запустить китайскую версию Word!');
DdeExample.ServiceApplication := 'WinWord.exe';
конец;
конец
else Begin{если макрокоманда была динамически связана}
DdeExample.ExecuteMacroLines(Cmds,False);
конец;
конец
еще
DdeExample.ExecuteMacroLines(Cmds,false);
конец;
Добавьте следующее в область частной декларации:
процедура ActiveWord (Cmds: TStrings);
3) Добавьте кнопку Button1 в Form1 и напишите следующий код в событии onclick:
процедура TForm1.Button1Click(Отправитель: TObject);
вар
Cmds:TStringList;{Создать Cmds}
TempItem1, TempItem2: Строка;
начинать
cmds:=TStringList.Create;
cmds.Очистить;
TempItem1:='Первый элемент данных';
TempItem2:='Элемент данных два';
с Cmds сделать
начинать
Прозрачный;
Add('[FileNew.Template ="Example.Dot″]');{Открыть файл шаблона example.Dot}
Add('[AppMaximize]');{Развернуть документ}
Add('[SetFormResult "Item1",″'+TempItem1+'″]');{Передать данные TempItem1 в поле формы Item1}
Add('[SetFormResult "Item2","'+TempItem2+'"]);{Передача данных TempItem2 в поле формы Item2}
конец;
WordActive(DdeExample,Cmds);{Вызов пользовательского процесса}
Cmds.Free;{Выпустить Cmds}
конец;
Запустите эту программу, нажмите кнопку Button1, вы обнаружите, что Word запускается, и на экране появляются два элемента данных: элемент данных один; элемент данных два; Наконец, вы можете по своему желанию изменить формат и данные этого отчета, поскольку этот отчет не имеет никакого отношения к конкретному приложению.
В этом примере используется китайский Word6 или китайский Word7. Поскольку макрокоманды Word97 были изменены на операторы Visual Basic, если вы хотите использовать Word97 для их реализации, измените макрокоманды на соответствующие коды.
Это простой пример. Вы можете использовать функцию записи макросов Word для записи большего количества макросов (например, автоматического создания таблиц, заполнения текста, изменения шрифтов и других макрокоманд), а также связывать их с различными таблицами в базе данных и добавлять их. в Cmds, в свою очередь. Вы можете выполнить более сложные функции, которые вам нужны.