La Web del Programador: Comunidad de Programadores
 
    Pregunta:  38366 - JUSTIFICAR TEXTO DE WORD VIA PROGRAMA DE VFP 6
Autor:  Ricardo Andres Hinostroza Levano
Hola es la primera vez que consulta deseo sabe como justificar un parrafo u Hoja entera de Word por medio de un Programa de VFP , bueno he creado un PRG que me Crea un Documento en el cual se muestran datos en variables , ademas de cambiarle la Fuente he podido cambiar el Tamaño de la Fuente ademas de Agrrgarle el Efecto de Negrita al texto , pero deseo saber como Justificarlo Automaticamente

  Respuesta:  Cecilia Colalongo
* Word y Excel pueden tratarse como dos objetos COM, las clases de ambos son:
        Word.Application
       
        Excel.Application
        Esto es:
                o=CreateObject("Word.Application")
               
                o=CreateObject("Excel.Application")
* Algunos comandos de Word:
                o.Documents.Add() && Agrega un nuevo documento.
                o.Visible=.T. && Muestra la aplicación.
                o.Quit && Cierra la aplicación.
  Los dos últimos corren tanto para Word como para Excel.
* La mejor forma de conocer todos los comandos es grabando macros y luego convirtiendo el código
  de las mismas (queda en Visual Basic) a VFP, por ejemplo una de Word (Herramientas -> Macros ->
  Grabar nueva macro) y luego ves el código (ALT+F11)
        Sub Macro2()
            Documents.Add
       
            NewTemplate:=False, DocumentType:=0
            Selection.TypeText Text:="Esta es una prueba con Word."
            Selection.TypeParagraph
        End Sub
  El cambio para Visual Fox sería:
        #DEFINE True .T.
        #DEFINE False .F.
        WITH o
                .Documents.Add()
                .NewTemplate=False
                .DocumentType=0
                .Selection.TypeText("Esta es una prueba con Word.")
                .Selection.TypeParagraph
        ENDWITH
* En este ejemplo sencillo no se ve el problema principal que son todas las constantes que
  usan Word y Excel en estas macros. Estos archivos son msword9.olb y excel9.olb (en el
  caso de Office 2000 o msword8.olb y excel8.olb en el caso de Office 97), estos archivos
  de tipos los puede interpretar Visual Basic pero no VFP, para poder convertir estos
  archivos a .h (que sí lo reconoce VFP) tenés que hacer lo siguiente:
  1. En el Visual Studio 6 (creo que en el 5 también) viene una utilidad que se llama:
     OLE View, dentro de el entrás a File -> View TypeLib y elegís el archivo .olb que
     quieras (por lo general están siempre en ...\Microsoft Office\Office) ahí lo vas a
     ver en el panel de la derecha lo que tenés que hacer es seleccionar todo ese texto
     y copiarlo en un nuevo archivo de texto.
  2. Una vez que tenés ese archivo tenés que correrle este programa que te crea un .h
     (o lo que vos le indiques) con la sintaxis de VFP: #DEFINE ...
     El código es:
LPARAMETERS tcArchivoEntrada, tcArchivoSalida
LOCAL lnArchivoEntrada, lnArchivoSalida, lxTexto, lxTextoSalida, llSalida
IF PCOUNT()=0 OR !FILE(tcArchivoEntrada)
        MESSAGEBOX("Debe indicar el nombre del archivo",16,"¡Atención!")
        RETURN
ENDIF
IF PCOUNT()=1
        lnPoscPunto=RAT(".",tcArchivoEntrada)
        tcArchivoSalida=LEFT(tcArchivoEntrada, lnPoscPunto - 1)+".h"
ENDIF
CLOSE ALL
lnArchivoEntrada=FOPEN(tcArchivoEntrada)
lnArchivoSalida=FCREATE(tcArchivoSalida)
lxTexto=""
lxTextoSalida=""
llSalida=.F.
DO WHILE !FEOF(lnArchivoEntrada)
        lxTexto=FGETS(lnArchivoEntrada)
       
        IF "}" $ lxTexto
                llSalida=.F.
        ENDIF
       
        IF llSalida
                lxTextoSalida = ALLTRIM(lxTexto)
                lxTextoSalida = STRTRAN(lxTextoSalida,"="," ")
                lxTextoSalida = "#DEFINE "+ALLTRIM(lxTextoSalida)
               
                IF RIGHT(lxTextoSalida,1)=","
                        lxTextoSalida = SUBSTR(lxTextoSalida,1,LEN(lxTextoSalida)-1)
                ENDIF
               
                =FPUTS(lnArchivoSalida,ALLTRIM(lxTextoSalida))
        ENDIF
       
        IF "ENUM {" $ UPPER(lxTexto)
                llSalida = .T.
        ENDIF
       
ENDDO
CLOSE ALL