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
try
MiWord.Connect;
except
ShowMessage('WordXP no está instalado en este equipo');
Abort;
end;
Fichero:='c:\gesdonaciones\certificado.docx';
SoloLectura:=True;
MiDocumento:=MiWord.Documents.Open(Fichero, EmptyParam, SoloLectura,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam);
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;
a:=a+1;
Query1.Next;
end; 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; end;
Espero vuestras noticias muchas gracias.