19 de agosto de 2005

VFP 9.0 y API StarOffice 7

Bueno despues de mucho buscar y tanto o mas de estar adaptando codigo, por fin he podido concretar un par de ejemplos a fin de dejar como referencia para aquellos que novatos como yo :-)

Estos ejemplos estan probados y aunque Fox no me marca ningun error y el programa hace todo lo que quiero, se que pudieran surgir algunos errores que no he notado. Como les comento estos ejemplos corren usando VFP9 version en Ingles y StarOffice 7 en Español para Windows.

Dado que estos son los unicos recursos con los que cuento, no he podido hacer mas pruebas; asi que cualquier correccion y comentario lo agradeceria ampliamente.

Por ultimo, el codigo que se muestra, contiene los comandos MAS BASICOS tanto para el procesador de Textos como para la Hoja de Calculo, excepto el insertado de imagenes, si alguien llegase a desarrollar tal codigo creo que seria bueno que lo anotase aqui a fin de darle una mayor continuidad.

De antemano agradesco la información obtenida de entre otras fuentes a:

PortalFox, FoxPress y OpenOffice.org
*###################################*
*                                   *
**** EJEMPLO 1 STAROFFICE WRITER ****
*                                   *
*###################################*

LOCAL ARRAY laPropertyValue[1]
LOCAL loManager, loDesktop, loDocument, loCursor, PaginaPre, EstilosPagina, FormaObjetoGrafico

loManager = CREATEOBJECT( "com.sun.star.ServiceManager" )
loDesktop = loManager.createInstance( "com.sun.star.frame.Desktop" )
comarray( loDesktop, 10 )

loReflection = loManager.createInstance("com.sun.star.reflection.CoreReflection" )
comarray( loReflection, 10 )
 
laPropertyValue[1] = createStruct( @loReflection,"com.sun.star.beans.PropertyValue" )
laPropertyValue[1].NAME = "ReadOnly"
laPropertyValue[1].VALUE = .F.
loDocument = loDesktop.LoadComponentFromUrl( "STAROFFICE.factory:swriter","_blank", 0, @laPropertyValue )
comarray( loDocument, 10 )

loCursor= loDocument.TEXT.CreateTextCursor()
loDocument.text.insertString(loCursor, "Esta es la primera linea del texto.", .f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)
loCursor.text.insertString(loCursor, "Esta es la segunda linea", .f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

Tabla= loDocument.createInstance( "com.sun.star.text.TextTable")
Tabla.initialize(4, 4)
loCursor.text.insertTextContent(loCursor, Tabla, .f.)

objRows= Tabla.getRows
ColumnaT= objRows.getByIndex( 0)
Tabla.setPropertyValue("BackTransparent", .f.)
Tabla.setPropertyValue("BackColor", 13421823)

ColumnaT.setPropertyValue( "BackTransparent", .f.)
ColumnaT.setPropertyValue( "BackColor", 6710932)

insertIntoCell ("A1","FirstColumn", Tabla )
insertIntoCell ("B1","SecondColumn", Tabla )
insertIntoCell ("C1","ThirdColumn", Tabla )
insertIntoCell ("D1","SUM", Tabla )

var1=2
var2=48
var3=4

Tabla.getCellByName("A2").setValue(var1)
Tabla.getCellByName("B2").setValue(var2)
Tabla.getCellByName("C2").setValue(var3)
Tabla.getCellByName("D2").setFormula ((var1*var2)/var3)
Tabla.getCellByName("A3").setValue(21.5)
Tabla.getCellByName("B3").setValue(615.3)
Tabla.getCellByName("C3").setValue(-315.7)
Tabla.getCellByName("D3").setFormula ("sum ")
Tabla.getCellByName("A4").setValue (121.5)
Tabla.getCellByName("B4").setValue (-615.3)
Tabla.getCellByName("C4").setValue (415.7)
Tabla.getCellByName("D4").setPropertyValue( "BackColor", 16700000)
Tabla.getCellByName("D4").setFormula("sum")

loCursor.setPropertyValue ("CharColor", 255)
loCursor.text.insertControlCharacter (loCursor, 0 , .f.)
loDocument.text.insertString (loCursor, " Texto de Color" , .f.)
loCursor.setPropertyValue ("CharShadowed", .t.)
loDocument.text.insertString (loCursor, " - texto con sombra" , .f.)
loCursor.setPropertyValue ("CharShadowed", .f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

loDocumentFrame= loDocument.createInstance("com.sun.star.text.TextFrame")

objSize= createStruct(@loReflection, "com.sun.star.awt.Size")
objSize.Width= 15000
objSize.Height= 400
loDocumentFrame.setSize( objSize)
loDocumentFrame.setPropertyValue("AnchorType", 1)
loDocument.text.insertTextContent(loCursor, loDocumentFrame, .f.)

objFrameText= loDocumentFrame.getText
objFrameTextCursor= objFrameText.createTextCursor
objFrameTextCursor.setPropertyValue ("CharHeight", 10)
objFrameText.insertString(objFrameTextCursor, "Primera linea dentro del marco.", .f.)
objFrameText.insertControlCharacter(objFrameTextCursor, 0, .f.)
objFrameText.insertString(objFrameTextCursor, "Otra linea dentro del marco.", .f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)
 
loCursor.setPropertyValue ("CharColor", 65536)
loCursor.setPropertyValue ("CharFontName", 'Arial')
loDocument.text.insertString (loCursor, "Cambio de letra a Arial", .f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

loCursor.setPropertyValue ("CharWeight", 150)
loCursor.text.insertString(loCursor, "Negritas ", .f.)
loCursor.setPropertyValue ("CharWeight", 100)
loCursor.setPropertyValue ("CharPosture", 50)
loCursor.text.insertString(loCursor, "Cursiva ", .f.)
loCursor.setPropertyValue ("CharPosture", 0)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

loDocument.text.insertString (loCursor, "Texto Normal" ,.f.)
loCursor.setPropertyValue ("CharEscapement", 65)
loCursor.setPropertyValue ("CharHeight", 5)
loDocument.text.insertString (loCursor, " Superíndice" ,.f.)
loCursor.setPropertyValue ("CharEscapement", 0)
loCursor.setPropertyValue ("CharHeight", 10)
loDocument.text.insertString (loCursor, "  Texto Normal" ,.f.)
loCursor.setPropertyValue ("CharHeight", 5)
loCursor.setPropertyValue ("CharEscapement", -35)
loDocument.text.insertString (loCursor, " Subíndice" ,.f.)
loCursor.setPropertyValue ("CharEscapement", 0)
loCursor.setPropertyValue ("CharHeight", 10)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

loCursor.setPropertyValue ("CharUnderline", 1)
loDocument.text.insertString (loCursor, "Subrayado" ,.f.)
loCursor.setPropertyValue ("CharUnderline", 0)
loCursor.setPropertyValue ("CharFlash", .t.)
loDocument.text.insertString (loCursor, " Parpadeando" ,.f.)
loCursor.setPropertyValue ("CharFlash", .f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

loCursor.setPropertyValue ("CharHeight", 8)
loCursor.setPropertyValue ("CharFontName", 'Arial Black')
loCursor.setPropertyValue ("CharColor", 14500)
loDocument.text.insertString (loCursor, "Color 1,4500" ,.f.)
loCursor.setPropertyValue ("CharColor", 18500)
loDocument.text.insertString (loCursor, CHR(9)+"Color 18,500" ,.f.)
loCursor.setPropertyValue ("CharColor", 20500)
loDocument.text.insertString (loCursor, CHR(9)+"Color 20,500" ,.f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

loCursor.setPropertyValue ("ParaAdjust", 3)
loDocument.text.insertString (loCursor, "Color 13,459,998 AAAAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBB" ;
+" CCCCCC DDDDDD EEEEEEE F F F FFFF GGGGGGG HHHH" ,.f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

loCursor.setPropertyValue ("ParaAdjust", 0)
loDocument.text.insertString (loCursor, "Color 16,711,680 AAAAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBB" ;
+" CCCCCC DDDDDD EEEEEEE F F F FFFF GGGGGGG HHHH" ,.f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

loCursor.setPropertyValue ("ParaAdjust", 2)
loCursor.setPropertyValue ("CharColor", 9603696)
loDocument.text.insertString (loCursor, "Color 9,603,696 AAAAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBB" ;
+" CCCCCC DDDDDD EEEEEEE F F F FFFF GGGGGGG HHHH" ,.f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

loCursor.setPropertyValue ("ParaAdjust", 1)
loCursor.setPropertyValue ("CharColor", 8355711)
loDocument.text.insertString (loCursor, "Color 8,355,711 AAAAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBB" ;
+" CCCCCC DDDDDD EEEEEEE F F F FFFF GGGGGGG HHHH" ,.f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

loCursor.setPropertyValue ("CharColor", RGB(0,0,255))
loDocument.text.insertString (loCursor, "Color 8,355,711 AAAAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBB" ;
+" CCCCCC DDDDDD EEEEEEE F F F FFFF GGGGGGG HHHH " ,.f.)
loDocument.text.insertControlCharacter( loCursor, 0, .f.)

or_url="file:///c:/test.sxw"
laPropertyValue[1].NAME= "Overwrite"
laPropertyValue[1].VALUE= .T.
loDocument.storeAsURL( or_url, @laPropertyValue )
*#################################*
*                                 *
**** EJEMPLO 2 STAROFFICE CALC ****
*                                 *
*#################################*

LOCAL ARRAY laNoArgs[1]
LOCAL oSManager, oSDesktop, oStarDoc, oCursor, oSheet, PaginaPredeterminada, EstilosDePagina, Hoja2, oColuna
STORE "file:///c:/test.sxc" TO ne_url

oSManager = CREATEOBJECT("Com.Sun.Star.ServiceManager.1")
oSDesktop = oSManager.createInstance("com.sun.star.frame.Desktop")
COMARRAY(oSDesktop, 10)
loReflection = oSManager.createInstance("com.sun.star.reflection.CoreReflection" )
COMARRAY( loReflection, 10 )

laNoArgs[1]= createStruct( @loReflection,"com.sun.star.beans.PropertyValue" )
laNoArgs[1].NAME = "ReadOnly"
laNoArgs[1].VALUE = .F.
or_url = "file:///c:/file.sxc" && debera existir este archivo antes de correr el ejemplo.
ne_url = "file:///c:/test.xls"

oStarDoc = oSDesktop.loadComponentFromURL(or_url,"_blank", 0, @laNoArgs)
comarray( oStarDoc, 10 )

EstilosDePagina = oStarDoc.StyleFamilies.getByName("PageStyles")
PaginaPredeterminada = EstilosDePagina.getByName("Default")

WITH PaginaPredeterminada 
	.setPropertyValue("LeftMargin" , 1500)
	.setPropertyValue("RightMargin" , 1500)
	.setPropertyValue("TopMargin" , 2500)
	.setPropertyValue("BottomMargin" , 2500)
	.setPropertyValue("Width" , 35570)
	.setPropertyValue("Height" , 21590)
	.setPropertyValue("IsLandscape", .t.)
ENDWITH

oSheet = oStarDoc.getSheets().getByIndex( 0 )
Fila2 = oSheet.getRows().getByIndex(7)
Fila2.Height=2500
oColuna = oSheet.getColumns().getByIndex(0)
oColuna.Width = 1500
var2=48.6214879

WITH oSheet
	.getCellByPosition( 0, 0 ).SETSTRING("Mes")
	.getCellByPosition( 1, 0 ).SETSTRING("Ventas")
	.getCellByPosition( 0, 1 ).SETSTRING("Enero")
	.getCellByPosition( 0, 2 ).SETSTRING("Febrero")
	.getCellByPosition( 0, 3 ).SETSTRING("Marzo")
	.getCellByPosition( 0, 4 ).SETSTRING("Abril")
	.getCellByPosition( 0, 5 ).SETSTRING("Mayo")
	.getCellByPosition( 0, 6 ).SETSTRING("Junio")
	.getCellByPosition( 0, 7 ).SETSTRING("TOTAL")	
	.getCellByPosition( 1, 1 ).setValue(3826)
	.getCellByPosition( 1, 2 ).setValue(3504)
	.getCellByPosition( 1, 3 ).setValue(2961)
	.getCellByPosition( 1, 4 ).setValue(2504)
	.getCellByPosition( 1, 5 ).setValue(23400.352356)
	.getCellByPosition( 1, 6 ).setValue(VAR2)
	.getCellByPosition( 1, 7 ).SETFormula("=B2+B3+B4+B5+B6+B7")
ENDWITH
WITH oSheet.getCellByPosition(1,7)
	.setPropertyValue("CellBackColor", RGB(152,0,0))
	.setPropertyValue("CharWeight", 150)
	.setPropertyValue("CharUnderline", 1)
	.setPropertyValue("ParaAdjust", 3)
ENDWITH
	
Hoja2= oStarDoc.getSheets().getByName("Hoja2")	
Hoja2.getCellByPosition(0, 0).SETSTRING("Texto en la Segunda Hoja")

oFormat = oStarDoc.NumberFormats
WITH Hoja2
	.getCellRangeByName("A2:A10").NumberFormat =NumberFormat(@loReflection, oFormat, "0,00") && Number
	.getCellRangeByName("B1:B10").NumberFormat =NumberFormat(@loReflection, oFormat, "MM/DD/AAAA") && Date 
	.getCellRangeByName("C1:C10").NumberFormat =NumberFormat(@loReflection, oFormat, "#.###,00") 
ENDWITH
	
laNoArgs[1].NAME  = "Overwrite"
laNoArgs[1].VALUE = .t.
laNoArgs[1].NAME  = "FilterName"
laNoArgs[1].VALUE = "MS Excel 97"
oStarDoc.storeAsURL( ne_url, @laNoArgs)


**** FUNCIONES ****


Function createStruct( toReflection, tcTypeName )

	local loPropertyValue, loTemp
	loPropertyValue = createobject( "relation" )
	toReflection.forName( tcTypeName).createobject(@loPropertyValue)
	return ( loPropertyValue )

endproc

Function insertIntoCell( strCellName, strText, objTable)

   objCellText= objTable.getCellByName( strCellName)
   objCellCursor= objCellText.createTextCursor
   objCellCursor.setPropertyValue ("CharColor",16777215)
   objCellText.insertString(objCellCursor, strText, .f.)

EndProc

Function NumberFormat()
Lparameters loReflection, _format, _mascara
Local a_lang, v_key
Private a_lang

a_lang = Createstruct(@loReflection,"com.sun.star.lang.Locale")

a_lang.Language = "es"
a_lang.Country = "Mx"
a_lang.Variant = ""

v_key = _format.queryKey(_mascara, @a_lang, .T.)

If v_key = -1
	v_key = _format.addNew(_mascara, @a_lang)
EndIf

Return v_key

Luis Eligio Hamlet Garcia J.

No hay comentarios. :

Publicar un comentario

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.