En aplicaciones prácticas, el autor descubrió que el contenido del informe rara vez cambia, pero el formato de fuente y el diseño a menudo cambian y, a veces, los usuarios no quieren modificar el contenido real de la base de datos pero quieren cambiar el contenido del informe para ciertas necesidades. Si usas ReportSmith, puedes resolver el primer problema, pero no puedes hacer nada con el segundo, y su interfaz está en inglés, lo cual no es adecuado para los usuarios. Si usa el componente de informe TQReport en 3.0, ninguno de los dos se puede resolver en tiempo real y el código original debe modificarse y recompilarse antes de poder usarse. El uso de Word y Excel puede superar por completo las deficiencias anteriores. La implementación específica es la siguiente (tomando la implementación de Word como ejemplo):
Primero use Word para editar el formato del informe, diseñar el formato, reemplazar los elementos de datos que se generarán con campos del formulario y nombrarlos. Aquí asumimos temporalmente que hay campos de formulario Elemento1 y Elemento2 (ambos de tipo texto), guardamos este documento como un archivo de plantilla Ejemplo.dot y luego procedemos de la siguiente manera:
1) Ejecute Delphi3, agregue un componente TDdeClientCov en el componente del sistema configurado en Form1, asígnele el nombre DdeExample, configure su ConnectMode en ddeManual (modo manual); configure DdeService en '(WinWord)';
2) Escriba un proceso personalizado para activar Word, de la siguiente manera:
Procedimiento Tform1.WordActive(Cmds: TStrings);
var
WordPath: cadena;
comenzar
si (no DdeExample.OpenLink) entonces {determinar si está vinculado dinámicamente}
comenzar
si(FindWindow('OpusApp', nil)=0) entonces
comenzar
WordPath := 'C:msofficewinword';
si(WordPath=') entonces
ShowMessage('Word chino no está instalado o la ruta no está configurada, instale y configure la versión china de Word.')
si no, empezar
DdeExample.ServiceApplication := WordPath+'Winword.exe';
if(DdeExample.OpenLink) entonces {si el comando macro ha sido vinculado dinámicamente}
DdeExample.ExecuteMacroLines(Cmds,False)
demás
ShowMessage('¡No se puede iniciar la versión china de Word!');
DdeExample.ServiceApplication := 'WinWord.exe';
fin;
fin
else comienza {si el comando macro ha sido vinculado dinámicamente}
DdeExample.ExecuteMacroLines(Cmds,False);
fin;
fin
demás
DdeExample.ExecuteMacroLines(Cmds,falso);
fin;
Agregue lo siguiente al área de declaración privada:
procedimiento ActiveWord(Cmds: TStrings);
3) Agregue un botón Button1 a Form1 y escriba el siguiente código en su evento onclick:
procedimiento TForm1.Button1Click (Remitente: TObject);
var
Cmds:TStringList;{Crear cmds}
TempItem1,TempItem2:Cadena;
comenzar
cmds:=TStringList.Create;
cmds.Borrar;
TempItem1:='Elemento de datos uno';
TempItem2:='Elemento de datos dos';
con cmds hacer
comenzar
Claro;
Add('[FileNew.Template ="Example.Dot″]');{Abrir archivo de plantilla Ejemplo.Dot}
Add('[AppMaximize]');{Documento Maximizar}
Add('[SetFormResult"Item1",″'+TempItem1+''"]');{Pasar datos TempItem1 al campo de formulario Item1}
Add('[SetFormResult "Item2","'+TempItem2+'"]);{Pasar datos TempItem2 al campo de formulario Item2}
fin;
WordActive(DdeExample,Cmds);{Llamar proceso personalizado}
Cmds.Free;{liberar Cmds}
fin;
Ejecute este programa, haga clic en el Botón 1, podrá encontrar que se inicia Word y aparecen dos elementos de datos en la pantalla: elemento de datos uno; Finalmente, puedes modificar el formato y los datos de este informe a tu antojo, porque este informe no tiene nada que ver con la aplicación específica.
En este ejemplo, se utiliza chino Word6 o chino Word7. Dado que los comandos macro de Word97 se han cambiado a declaraciones de Visual Basic, si desea utilizar Word97 para implementarlo, cambie los comandos macro a los códigos correspondientes.
Este es un ejemplo simple. Puede usar la función de grabación de macros de Word para grabar más macros (como generar tablas automáticamente, completar texto, cambiar fuentes y otros comandos de macro), conectarlas con varias tablas en la base de datos y agregarlas. a Cmds a su vez puede lograr funciones más complejas que necesite.