Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-10-2006
Carliviris Carliviris is offline
Miembro
 
Registrado: abr 2006
Posts: 93
Poder: 19
Carliviris Va por buen camino
Imprimir en Word

Saludos a todos:

Estoy haciendo replace en un documento de word y todo esta muy bien. Lo unico que me falta es encontrar la manera de mandarlo a imprimir, opcion que se me ha hecho muy dificil de encontrar. Aca les dejo un ejemplo del codigo que estoy utilizando para hacer los replaces a ver si algunos de ustedes ha trabajado con este o tiene alguna idea de como hacer el mandato de imprimir. Todas las formas que creo que son me han resultado erroneas. Aqui esta:

Código Delphi [-] usesComObj;// Replace FlagstypeTWordReplaceFlags = set of (wrfReplaceAll, wrfMatchCase, wrfMatchWildcards);function Word_StringReplace(ADocument: TFileName; SearchString, ReplaceString: string; Flags: TWordReplaceFlags): Boolean;constwdFindContinue = 1; wdReplaceOne = 1; wdReplaceAll = 2; wdDoNotSaveChanges = 0; varWordApp: OLEVariant;beginResult := False;{ Check if file exists }if not FileExists(ADocument) then begin ShowMessage('Specified Document not found.'); Exit; end;{ Create the OLE Object }tryWordApp := CreateOLEObject('Word.Application');except on E: Exception do begin E.Message := 'Word is not available.'; raise;end;end;try{ Hide Word }WordApp.Visible := False;{ Open the document }WordApp.Documents.Open(ADocument);{ Initialize parameters}WordApp.Selection.Find.ClearFormatting; WordApp.Selection.Find.Text := SearchString; WordApp.Selection.Find.Replacement.Text := ReplaceString; WordApp.Selection.Find.Forward := True; WordApp.Selection.Find.Wrap := wdFindContinue; WordApp.Selection.Find.Format := False; WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags; WordApp.Selection.Find.MatchWholeWord := False; WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags; WordApp.Selection.Find.MatchSoundsLike := False; WordApp.Selection.Find.MatchAllWordForms := False; { Perform the search}if wrfReplaceAll in Flags thenWordApp.Selection.Find.Execute(Replace := wdReplaceAll)elseWordApp.Selection.Find.Execute(Replace := wdReplaceOne);{ Save word }WordApp.ActiveDocument.SaveAs(ADocument);{ Assume that successful }Result := True;{ Close the document }WordApp.ActiveDocument.Close(wdDoNotSaveChanges);finally{ Quit Word }WordApp.Quit; WordApp := Unassigned; end;end;
Responder Con Cita
  #2  
Antiguo 11-10-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Hola.

Por favor, el código que has puesto es ilegible!.

¿Podrías encerrarlo en la etiqueta [delphi]?

¿no sabes como se usa? mirá en mi firma el enlace a la etiqueta [code], el uso de la etiqueta delphi es exactamente el mismo.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 11-10-2006
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por jachguate
Hola.

Por favor, el código que has puesto es ilegible!.

¿Podrías encerrarlo en la etiqueta [delphi]?

¿no sabes como se usa? mirá en mi firma el enlace a la etiqueta [code], el uso de la etiqueta delphi es exactamente el mismo.

Hasta luego.

Pues resulta que sí ha usado la etiqueta [delphi]. Lo que ocurre es que hay un bug en este foro que hace que, al pulsar el botón "Vista Previa de Mensaje" el bloque se va al traste...

Aun así, si se edita el mensaje y se colocan de nuevo las etiquetas, se verá bien.
Responder Con Cita
  #4  
Antiguo 11-10-2006
Carliviris Carliviris is offline
Miembro
 
Registrado: abr 2006
Posts: 93
Poder: 19
Carliviris Va por buen camino
Código Delphi [-]usesComObj;// Replace FlagstypeTWordReplaceFlags = set of (wrfReplaceAll, wrfMatchCase, wrfMatchWildcards);function Word_StringReplace(ADocument: TFileName; SearchString, ReplaceString: string; Flags: TWordReplaceFlags): Boolean;constwdFindContinue = 1; wdReplaceOne = 1; wdReplaceAll = 2; wdDoNotSaveChanges = 0; varWordApp: OLEVariant;beginResult := False;{ Check if file exists }if not FileExists(ADocument) then begin ShowMessage('Specified Document not found.'); Exit; end;{ Create the OLE Object }tryWordApp := CreateOLEObject('Word.Application');except on E: Exception do begin E.Message := 'Word is not available.';raise;end;end;try{ Hide Word }WordApp.Visible := False;{ Open the document }WordApp.Documents.Open(ADocument);{ Initialize parameters}WordApp.Selection.Find.ClearFormatting; WordApp.Selection.Find.Text := SearchString; WordApp.Selection.Find.Replacement.Text := ReplaceString; WordApp.Selection.Find.Forward := True; WordApp.Selection.Find.Wrap := wdFindContinue; WordApp.Selection.Find.Format := False; WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags; WordApp.Selection.Find.MatchWholeWord := False; WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags; WordApp.Selection.Find.MatchSoundsLike := False; WordApp.Selection.Find.MatchAllWordForms := False; { Perform the search}if wrfReplaceAll in Flags thenWordApp.Selection.Find.Execute(Replace := wdReplaceAll)elseWordApp.Selection.Find.Execute(Replace := wdReplaceOne);{ Save word }WordApp.ActiveDocument.SaveAs(ADocument);{ Assume that successful }Result := True;{ Close the document }WordApp.ActiveDocument.Close(wdDoNotSaveChanges);finally{ Quit Word }WordApp.Quit; WordApp := Unassigned; end;end;


Ahi esta, pero no se pk no salio bien, pk puse el codigo dentro de las etiquetas y no es la primera vez que envio mensajes para consultar algo. En la vista previa de mensaje me salio bien en la ocasion anterior y despues miren como salio. Vamos a ver en esta.
Responder Con Cita
  #5  
Antiguo 11-10-2006
Carliviris Carliviris is offline
Miembro
 
Registrado: abr 2006
Posts: 93
Poder: 19
Carliviris Va por buen camino
lo siento, salio mal nuevamente, el problema no es mio, sino de las etiquetas. Parece que no soporta texto muy largo, vamos a ver si cortado por partes me lo acepta:

Primera parte:
Código Delphi [-]
uses
  ComObj;

// Replace Flags
type
  TWordReplaceFlags = set of (wrfReplaceAll, wrfMatchCase, wrfMatchWildcards);

function Word_StringReplace(ADocument: TFileName; SearchString, ReplaceString: string; Flags: TWordReplaceFlags): Boolean;
const
  wdFindContinue = 1;
  wdReplaceOne = 1;
  wdReplaceAll = 2;
  wdDoNotSaveChanges = 0;
var
  WordApp: OLEVariant;
begin
  Result := False;

  { Check if file exists }
  if not FileExists(ADocument) then
  begin
    ShowMessage('Specified Document not found.');
    Exit;
  end;

  { Create the OLE Object }
  try
    WordApp := CreateOLEObject('Word.Application');
  except
    on E: Exception do
    begin
      E.Message := 'Word is not available.';
      raise;
    end;
  end;
 

Segunda parte:

Código Delphi [-]
try
    { Hide Word }
    WordApp.Visible := False;
    { Open the document }
    WordApp.Documents.Open(ADocument);
    { Initialize parameters}
    WordApp.Selection.Find.ClearFormatting;
    WordApp.Selection.Find.Text := SearchString;
    WordApp.Selection.Find.Replacement.Text := ReplaceString;
    WordApp.Selection.Find.Forward := True;
    WordApp.Selection.Find.Wrap := wdFindContinue;
    WordApp.Selection.Find.Format := False;
    WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
    WordApp.Selection.Find.MatchWholeWord := False;
    WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
    WordApp.Selection.Find.MatchSoundsLike := False;
    WordApp.Selection.Find.MatchAllWordForms := False;
    { Perform the search}
    if wrfReplaceAll in Flags then
      WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
    else
      WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
    { Save word }
    WordApp.ActiveDocument.SaveAs(ADocument);
    { Assume that successful }
    Result := True;
    { Close the document }
    WordApp.ActiveDocument.Close(wdDoNotSaveChanges);
  finally
    { Quit Word }
    WordApp.Quit;
    WordApp := Unassigned;
  end;
end;
 

Veamos ahora
Responder Con Cita
  #6  
Antiguo 11-10-2006
Carliviris Carliviris is offline
Miembro
 
Registrado: abr 2006
Posts: 93
Poder: 19
Carliviris Va por buen camino
Quiero hacer un recuento de todo, para los que estan viendo este tema por primera vez. Tengo una funcion de replace en word que me funciona perfectamente, lo que no encuentro es la manera de mandar a imprimir. Publique el codigo en el mensaje anterior a este, para que si alguien a trabajado con un codigo parecido o tiene alguna idea de como mandar a imprimir, por favor me pueda explicar.

Disculpen lo estrambotico de los mensajes del tema, pero es que parece que las etiquetas no aceptan demasiado texto y me salio de esa manera. Tuve que dividirlo en dos partes para que saliera legible.
Responder Con Cita
  #7  
Antiguo 11-10-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Hola.

Por favor, explicame cómo es que haces fallar a la etiqueta delphi, pues he realizado pruebas, incluso con unidades completas de código y ha funcionado de maravilla, tanto al hacer una "vista previa de Mensaje" como al publicar el post.

En concreto, he probado metiendole las unidades:
  • SHFolder.pas, 3,762 caracteres, 94 líneas.
  • ObjComAuto.pas, 13,828 caracteres, 417 líneas
  • OpenGL.pas, 149,688 caracteres, 3,548 líneas: obtuve un mensaje de error indicando que el mayor texto que puede enviarse es de 20,000 caracteres, así que lo reduje a mas o menos esa cantidad y todo funcionó ok.

En todos los casos, como ya dije, ha funcionado perfecto.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 11-10-2006
Carliviris Carliviris is offline
Miembro
 
Registrado: abr 2006
Posts: 93
Poder: 19
Carliviris Va por buen camino
el mensaje que envie dividido las etiquetas en dos, ese mensaje completo sin dividir fue que me dio el fallo.

aunque antes de publicarlo entraba a vista previa
no se si enviandolo sin entrar a vista previa deja de fallar o si el fallo esta ahi
Responder Con Cita
  #9  
Antiguo 11-10-2006
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Carliviris
el mensaje que envie dividido las etiquetas en dos, ese mensaje completo sin dividir fue que me dio el fallo.

aunque antes de publicarlo entraba a vista previa
no se si enviandolo sin entrar a vista previa deja de fallar o si el fallo esta ahi
A mi me falla siempre que uso primero "Vista Previa".

[nota] Creo que algún moderador debería dividir este hilo en dos (si se puede): uno para el problema con Word y el otro sobre el supuesto bug en las etiquetas.
Responder Con Cita
  #10  
Antiguo 11-10-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Coincido con Ñuño! A mi tambien me pasa que en la vista previa se ven bien las etiquetas de codigo delphi pero al colocar el mensaje "desaparecen".

Saludos
Responder Con Cita
  #11  
Antiguo 11-10-2006
Carliviris Carliviris is offline
Miembro
 
Registrado: abr 2006
Posts: 93
Poder: 19
Carliviris Va por buen camino
si, lo que pasa es que parece que no estan familiarizados con ese codigo, porque hay muchas formas de hacer replace en word
yo sigo intentando por otro lado y buscando soluciones
si encuentran alguna que podria ser, por favor publiquenla
Responder Con Cita
  #12  
Antiguo 11-10-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo no entiendo qué es lo que preguntas. Por un lado parece que tienes dudas de como imprimir. Pues bien, usa Document.PrintOut. Pero por otro lado parece que tú problema está con los reemplazos ya que enfatizas mucho en ello.

// Saludos
Responder Con Cita
  #13  
Antiguo 11-10-2006
Carliviris Carliviris is offline
Miembro
 
Registrado: abr 2006
Posts: 93
Poder: 19
Carliviris Va por buen camino
No roman, mi problema no esta con los reemplazos. Los menciono mucho para que vean de que tipo de impresion es que estoy hablando. Pero probare eso que me has dado y te doy la respuesta enseguida.
Responder Con Cita
  #14  
Antiguo 11-10-2006
Carliviris Carliviris is offline
Miembro
 
Registrado: abr 2006
Posts: 93
Poder: 19
Carliviris Va por buen camino
me da este error cuando intento usar el document.printout:


Código Delphi [-]
---------------------------
Debugger Exception Notification
---------------------------
Project contratos.exe raised exception class EOleError with message 'Method 'PrintOut' not supported by automation object'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------

Aqui les presento la parte del codigo donde utilizo el printout:

Código Delphi [-]
function TwinMain.CONTRATO_StringReplace(ADocument: TFileName; Sender: TObject): Boolean;
const
  wdFindContinue = 1;
  wdReplaceOne = 1;
  wdReplaceAll = 2;
  wdDoNotSaveChanges = 0;
var
 i           : integer;
 Flags       : TWordReplaceFlags;
begin

  Result := False;
  Flags  := [wrfReplaceAll];

  { Chequea si el archivo existe }
  if not FileExists(ADocument) then
   begin
    ShowMessage('El documento especificado no existe');
    Exit;
  end;

  { Creando el Objeto Ole }
  try
    WordApp := CreateOLEObject('Word.Application');
  except
    on E: Exception do
    begin
      E.Message := 'Microsoft Word no esta habilitado';
      raise;
    end;
  end;

  Contrato_SearchString;

  try
  { Ocultar Microsoft Word }
   WordApp.Visible := true;
    { Abrir el documento }
   WordApp.Documents.Open(ADocument);

   { Inicializacion de los parametros}
    for i:= 1 to 28 do
     begin
       //Para desplegar el desglose_inicial//
       if i = 27 then
        Desg_Inicial_Cont;

       if ((i <> 28) and (i <> 27)) then
        begin
         WordApp.Selection.Find.ClearFormatting;
         WordApp.Selection.Find.Text := SearchStr[i];
         WordApp.Selection.Find.Replacement.Text := ReplaceStr[i];
         WordApp.Selection.Find.Forward := True;
         WordApp.Selection.Find.Wrap := wdFindContinue;
         WordApp.Selection.Find.Format := False;
         WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
         WordApp.Selection.Find.MatchWholeWord := False;
         WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
         WordApp.Selection.Find.MatchSoundsLike := False;
         WordApp.Selection.Find.MatchAllWordForms := False;

         { Perform the search}
         if wrfReplaceAll in Flags then
           WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
         else
           WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
       end
       else
        begin
            //Para desglose_cuotas//
           DesgloseCuotas;
        end;
     end;
     finally
      WordApp.Documents.PrintOut;
Responder Con Cita
  #15  
Antiguo 11-10-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Debe aplicarse al objeto Document, no sé si funcione también para el objeto Application.

Como yo lo he usado es así:

Código Delphi [-]
var
  WordApp, Document: OleVariant;

...

Document := WordApp.Documents.Open(ADocument);

...

Document.PrintOut(false);

Document.Close;
WordApp.Quit;

Si no le pasas el parámtro false a PrintOut o le pasas true, te puede causar problemas porque la sentencia PrintOut termina antes de terminar la impresión, se manera que se cierra el documento antes de terminar. El false indica que PrintOut no regrese sino hasta que termine la impresión.

// Saludos
Responder Con Cita
  #16  
Antiguo 11-10-2006
Carliviris Carliviris is offline
Miembro
 
Registrado: abr 2006
Posts: 93
Poder: 19
Carliviris Va por buen camino
Ey, hice unos ajustes con las lineas de codigo que me paso roman y todo salio excelente.

Lo que cambie fue lo siguiente:
Yo tenia:
Código Delphi [-]
WordApp.Documents.Open(ADocument);

Y cambie por:

Código Delphi [-]
Document := WordApp.Documents.Open(ADocument);

mandando a imprimir:
Código Delphi [-]
...

Document.PrintOut(false);
Responder Con Cita
  #17  
Antiguo 11-10-2006
Carliviris Carliviris is offline
Miembro
 
Registrado: abr 2006
Posts: 93
Poder: 19
Carliviris Va por buen camino
ahh, gracias a todos por ayudar
Responder Con Cita
  #18  
Antiguo 05-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola Waldo, debes crear un nuevo hilo con tu pregunta porque es algo distinto a lo que se inició el hilo, o sea, que no estás aportando nada a la resolución de este tema, sino que estás haciendo una pregunta nueva. Recuerda nuestra guía de estilo, gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Imprimir y Cerrar Word yorllito Servers 2 18-05-2006 02:33:53
Al imprimir docs.word con shellexecute..... Javier_A OOP 4 18-01-2006 16:59:22
"Word no envia la orden de imprimir de mi impresora" karekano85 Servers 0 09-12-2005 23:25:11
modificar documento word sin el word instalado joaquinmol Servers 0 30-03-2005 19:58:54
Imprimir con word en impresora en concreto Firibiri Servers 0 07-10-2003 11:09:09


La franja horaria es GMT +2. Ahora son las 22:06:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi