Ayuda con este codigo

08/09/2009 - 17:18 por Alejandro Garcia G. | Informe spam
Saludos a todos(as): he encontrado un codigo muy interesante en el
PortalFox, pero no logro que me ejecute bien y creo que es por que no
esta bien descrito o no se como colocarlo, es decir, cual es la
funcion (de donde a donde va), que parametros debo anexar, la
estructura del documento cual es...

Se que es una inquetud tonta, pero no logro que me corra bien,
agradezco a ustedes si me guian un poco mas, gracias.

Abrir, Modificar, Guardar e Imprimir archivos .doc usando OpenOffice
Writer

local array laNoArgs[1]
local loSManager, loSDesktop, loStarDoc, loReflection,
loPropertyValue, loOpenDoc, loCursor, loFandR

loSManager = createobject( "Com.Sun.Star.ServiceManager.1" )

loSDesktop = loSManager.createInstance( "com.sun.star.frame.Desktop" )
comarray( loSDesktop, 10 )

loReflection = loSManager.createInstance
( "com.sun.star.reflection.CoreReflection" )
comarray( loReflection, 10 )

loPropertyValue = THISFORM.createStruct( @loReflection,
"com.sun.star.beans.PropertyValue" )

laNoArgs[1] = loPropertyValue
laNoArgs[1].name = "ReadOnly"
laNoArgs[1].value = .F.

* crea un archivo nuevo ...
* url = "private:factory/swriter"

* Datos que vienen de la base de datos ...

lcTmp = "nombre del origen de datos"

lcNro_infor = PADL(&lcTmp..nro_infor, 8, '0')
lcDetalle = &lcTmp..detalle
lcFecha = DTOC(&lcTmp..fecha)

* Puede usar archivos en los 2 formatos: .odt y .doc
lcArchivoOrigen = "C:/temp/modelo1.odt"
lcArchivoDestino = "C:/temp/eco" + lcNro_infor + " - " + ALLTRIM
(lcDetalle) + ".odt"
* c:\temp\eco00112638 - 53565 diaz de rodriguez
claudia.odt

lcArchivoOrigen = "C:/temp/modelo1.doc"
lcArchivoDestino = "C:/temp/eco" + lcNro_infor + " - " + ALLTRIM
(lcDetalle) + ".doc"
* c:\temp\eco00112638 - 53565 diaz de rodriguez
claudia.doc

COPY FILE (lcArchivoOrigen) TO (lcArchivoDestino)

url = "file:///" + lcArchivoDestino

loOpenDoc = loSDesktop.LoadComponentFromUrl(url, "_blank", 0,
@laNoargs)

* escribir texto en el documento ...
loCursor = loOpenDoc.text.CreateTextCursor()
loOpenDoc.text.InsertString(loCursor, "HELLO FROM VFP", .f. )

* Objeto para buscar las Marcas en el Documento
* si las marcas son encontradas, son remplazadas
* si alguna marca no existiera, no hay mayor problema, simplemente no
se remplaza

loFandR = loOpenDoc.createReplaceDescriptor
loFandR.searchRegularExpression = .T.

loFandR.setSearchString("«nro_infor»")
loFandR.setReplaceString(lcNro_infor)
loOpenDoc.ReplaceAll(loFandR)

loFandR.setSearchString("«fecha»")
loFandR.setReplaceString(lcFecha)
loOpenDoc.ReplaceAll(loFandR)

loFandR.setSearchString("«detalle»")
loFandR.setReplaceString(lcDetalle)
loOpenDoc.ReplaceAll(loFandR)

* imprime el documento
* loOpenDoc.printer()

* graba el documento ...
* loOpenDoc.store()

* grabar con otro nombre ...
* Url = "file:///C:/temp/test3.odt"
* loStarDoc.storeAsURL(URL, @laNoargs)

RETURN

* CreateStruct --*
PARAMETERS toReflection, tcTypeName

local loPropertyValue, loTemp

loPropertyValue = createobject( "relation" )

toReflection.forName( tcTypeName ).createobject( @loPropertyValue )

return ( loPropertyValue )

El CreateStruct, yo lo uso como un metodo del formulario ...

Marcelo ARDUSSO
Rafaela, Santa Fe. Argentina

* http://wiki.services.openoffice.org...tarDesktop
* http://user.services.openoffice.org...p?fP&t06

* vb_oo2.zip <- ejemplo en visual basic
* Archivo descargado de La Web del Programador
* http://www.lawebdelprogramador.com

El siguiente es el archivo Modelo 1

Modelo 1
-
Protocolo Nº «nro_infor»
Fecha «fecha»

Paciente: «detalle»

Estimado/a «detalle»

Esta es una prueba para generar informes en
WRITER desde un programa de Visual Foxpro 9.0

Sin otro particular lo saludamos atte.

powered by: Visual Foxpro 9.0

Preguntas similare

Leer las respuestas

#1 Enrique Muñiz
08/09/2009 - 17:38 | Informe spam
tenes el OpenOffice Writer? cual es el error, en que linea?
Enrique Muñiz
Departamento Desarrollo
Servicios & Sistemas

"Alejandro Garcia G." escribió en el mensaje
news:
Saludos a todos(as): he encontrado un codigo muy interesante en el
PortalFox, pero no logro que me ejecute bien y creo que es por que no
esta bien descrito o no se como colocarlo, es decir, cual es la
funcion (de donde a donde va), que parametros debo anexar, la
estructura del documento cual es...

Se que es una inquetud tonta, pero no logro que me corra bien,
agradezco a ustedes si me guian un poco mas, gracias.

Abrir, Modificar, Guardar e Imprimir archivos .doc usando OpenOffice
Writer

local array laNoArgs[1]
local loSManager, loSDesktop, loStarDoc, loReflection,
loPropertyValue, loOpenDoc, loCursor, loFandR

loSManager = createobject( "Com.Sun.Star.ServiceManager.1" )

loSDesktop = loSManager.createInstance( "com.sun.star.frame.Desktop" )
comarray( loSDesktop, 10 )

loReflection = loSManager.createInstance
( "com.sun.star.reflection.CoreReflection" )
comarray( loReflection, 10 )

loPropertyValue = THISFORM.createStruct( @loReflection,
"com.sun.star.beans.PropertyValue" )

laNoArgs[1] = loPropertyValue
laNoArgs[1].name = "ReadOnly"
laNoArgs[1].value = .F.

* crea un archivo nuevo ...
* url = "private:factory/swriter"

* Datos que vienen de la base de datos ...

lcTmp = "nombre del origen de datos"

lcNro_infor = PADL(&lcTmp..nro_infor, 8, '0')
lcDetalle = &lcTmp..detalle
lcFecha = DTOC(&lcTmp..fecha)

* Puede usar archivos en los 2 formatos: .odt y .doc
lcArchivoOrigen = "C:/temp/modelo1.odt"
lcArchivoDestino = "C:/temp/eco" + lcNro_infor + " - " + ALLTRIM
(lcDetalle) + ".odt"
* c:\temp\eco00112638 - 53565 diaz de rodriguez
claudia.odt

lcArchivoOrigen = "C:/temp/modelo1.doc"
lcArchivoDestino = "C:/temp/eco" + lcNro_infor + " - " + ALLTRIM
(lcDetalle) + ".doc"
* c:\temp\eco00112638 - 53565 diaz de rodriguez
claudia.doc

COPY FILE (lcArchivoOrigen) TO (lcArchivoDestino)

url = "file:///" + lcArchivoDestino

loOpenDoc = loSDesktop.LoadComponentFromUrl(url, "_blank", 0,
@laNoargs)

* escribir texto en el documento ...
loCursor = loOpenDoc.text.CreateTextCursor()
loOpenDoc.text.InsertString(loCursor, "HELLO FROM VFP", .f. )

* Objeto para buscar las Marcas en el Documento
* si las marcas son encontradas, son remplazadas
* si alguna marca no existiera, no hay mayor problema, simplemente no
se remplaza

loFandR = loOpenDoc.createReplaceDescriptor
loFandR.searchRegularExpression = .T.

loFandR.setSearchString("«nro_infor»")
loFandR.setReplaceString(lcNro_infor)
loOpenDoc.ReplaceAll(loFandR)

loFandR.setSearchString("«fecha»")
loFandR.setReplaceString(lcFecha)
loOpenDoc.ReplaceAll(loFandR)

loFandR.setSearchString("«detalle»")
loFandR.setReplaceString(lcDetalle)
loOpenDoc.ReplaceAll(loFandR)

* imprime el documento
* loOpenDoc.printer()

* graba el documento ...
* loOpenDoc.store()

* grabar con otro nombre ...
* Url = "file:///C:/temp/test3.odt"
* loStarDoc.storeAsURL(URL, @laNoargs)

RETURN

* CreateStruct --*
PARAMETERS toReflection, tcTypeName

local loPropertyValue, loTemp

loPropertyValue = createobject( "relation" )

toReflection.forName( tcTypeName ).createobject( @loPropertyValue )

return ( loPropertyValue )

El CreateStruct, yo lo uso como un metodo del formulario ...

Marcelo ARDUSSO
Rafaela, Santa Fe. Argentina

*
http://wiki.services.openoffice.org...tarDesktop
* http://user.services.openoffice.org...p?fP&t06

* vb_oo2.zip <- ejemplo en visual basic
* Archivo descargado de La Web del Programador
* http://www.lawebdelprogramador.com

El siguiente es el archivo Modelo 1

Modelo 1
-
Protocolo Nº «nro_infor»
Fecha «fecha»

Paciente: «detalle»

Estimado/a «detalle»

Esta es una prueba para generar informes en
WRITER desde un programa de Visual Foxpro 9.0

Sin otro particular lo saludamos atte.

powered by: Visual Foxpro 9.0
Respuesta Responder a este mensaje
#2 Alejandro Garcia G.
08/09/2009 - 18:11 | Informe spam
Ok, señores, gracias por leerme y la respuesta que recibi. Ya
solucione el problema. Habia varias partes que no entendia:

1. El archivo modelo: Hay que crear el archivo en OOO o en Word igual
a este:
Protocolo Nº «nro_infor»
Fecha «fecha»

Paciente: «detalle»

Estimado/a «detalle»

Esta es una prueba para generar informes en
WRITER desde un programa de Visual Foxpro 9.0

Sin otro particular lo saludamos atte.

powered by: Visual Foxpro 9.0

Las partes que estan entre «» son las que van a variar.

2. Cree un formulario con un unico boton y un metodo:
Metodo: CreateStruct
PARAMETERS toReflection, tcTypeName

local loPropertyValue, loTemp

loPropertyValue = createobject( "relation" )

toReflection.forName( tcTypeName ).createobject
( @loPropertyValue )

return ( loPropertyValue )

3. En el boton coloque el resto del codigo y realice un par de cambios
para que me funcionara:
Esta parte la quite totalmente y la reemplace por la de abajo, antes
habia creado una tabla con la siguiente estructura que serian los
campos a reemplazar en el documento:
Tabla: Origendatos, campos: nro_infor n(3,0), detalle c(10), fcha d y
le ingrese un par de datos para probar
Toda esta parte la he cambiado por la que esta mas abajo
* Datos que vienen de la base de datos ...

lcTmp = "nombre del origen de datos"

lcNro_infor = PADL(&lcTmp..nro_infor, 8, '0')
lcDetalle = &lcTmp..detalle
lcFecha = DTOC(&lcTmp..fecha)

Esta es la parte que deje
USE origendatos
lcNro_infor = allt(str(nro_infor))
lcDetalle = detalle
lcFecha = fcha

Listo el resto queda igual, grabo, ejecuto y observo el resultado.
Logicamente se debe tener instalado Ooo.

Muy buen codigo, gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida