Ver Mensaje Individual
  #1  
Antiguo 02-03-2020
Avatar de Espartaco
[Espartaco] Espartaco is offline
Miembro Premium
 
Registrado: oct 2005
Posts: 107
Reputación: 19
Espartaco Va por buen camino
Cerrar bien archivo word.

Hola amigos, estoy abriendo un archivo de word con marcadores y dandoles valor para luego imprimir el archivo y cerrarlo. La asignacion de los datos a los marcadores lo hago sin problema, al igual que el abrir el archivo, pero cuando lo quiero cerrar descartando los cambios no los descarta y los graba. Entonces al volver a abrirlo me repito el valor del marcador. Es un bucle que debe ser transparente para el usuario. Todo lo hace bien excepto que no cierra el archivo descartando los cambios, ni cierra del todo la aplicacion de word.
Este es el codigo de la rutina que debe hacer lo que comento:
Código Delphi [-]
procedure TGestCertificados.BitBtn3Click(Sender: TObject);
var Fichero, Marcador, Contenido, SoloLectura, SalvarCambios, FormatoOriginal, Ruta : OleVariant;
   MiDocumento : _document;
    a: integer;

   procedure SustituirMarcador;
   begin
        if MiDocumento.Bookmarks.Exists(Marcador) then MiDocumento.Bookmarks.Item(Marcador).Range.InsertBefore(Contenido);
   end;
begin
 panel5.Visible:=True;
 Query1.First;
 a:=1;
        while not Query1.Eof do
        begin
        if a>SpinEdit2.Value then a:=1;
            while a<=SpinEdit2.Value do
            begin
            //impresion del certificado
   // Conexión con Word
   try
   MiWord.Connect;
   except
   ShowMessage('WordXP no está instalado en este equipo');
   Abort;
   end;
     Fichero:='c:\gesdonaciones\certificado.docx';

   // abrir el documento seleccionado con los parámetros necesarios
   SoloLectura:=True;
   MiDocumento:=MiWord.Documents.Open(Fichero, EmptyParam, SoloLectura,
        EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
        EmptyParam);

   // comienzan las sustituciones de los marcadores.
   Marcador:='FECHA';
   Contenido:=FormatdateTime('dd "de " mmmm "de " yyyy',DateTimePicker1.Date);
   SustituirMarcador;
   Marcador:='DONANTE';
   Contenido:=QUERY1['NOMBRE']+' '+QUERY1['APELLIDOS'];
   SustituirMarcador;
   Marcador:='EJERCICIO';
   Contenido:=SpinEdit1.Text;
   SustituirMarcador;
   Marcador:='IMPORTE';
   Contenido:=CurrToStr(QUERY1['IMPORTE']);
   SustituirMarcador;
   Marcador:='NOMPARROCO';
   Contenido:=DM.DbDatParroquia['PARROCO'];
   SustituirMarcador;
   Marcador:='PARROCO';
   Contenido:=DM.DbDatParroquia['PARROCO'];
   SustituirMarcador;
   MiWord.PrintOut; 
   MiWord.Visible:=False; 
   SalvarCambios:=wdDoNotSaveChanges;
   FormatoOriginal:=unAssigned;
   Ruta:=unAssigned;
   try
   MiWord.Disconnect;
   except
   on e:Exception do
   begin
     ShowMessage('Se ha producido el error '+e.Message);
     MiWord.Disconnect;
   end;
   end;
            //fin de la impresion del certificado
            a:=a+1;
            Query1.Next;
            end; //incremento de a
        if Application.MessageBox(
        pchar(  '¿Desea continuar con la Impresión?'
        +#13#10
        +#13#10),
        pchar('Atención'),
        MB_YESNO+MB_ICONWARNING+MB_DEFBUTTON2)=IDNO then
        begin
        panel5.Visible:=False;
        Query1.First;
        Exit;
        end;
        end;  //posicion de query1
end;

Espero vuestras noticias muchas gracias.
Responder Con Cita