Hasta ahora nunca tuve necesidad de enviar a Open Office, ninguno de mis clientes lo usa (al menos que yo sepa), todos usan Excel así que es el que utilizo yo también.
Cuando deseo automatizar Excel lo que hago es lo siguiente:
1. Envío todos los datos que posteriormente irán a la planilla Excel a un archivo de texto
2. En cada fila de ese archivo de texto están los datos correspondientes a una celda de Excel
3. Hay una función que lee el contenido de ese archivo de texto y crea la planilla Excel correspondiente
¿Por qué hago así?
Porque eso me da total control sobre lo que deseo mostrar: celda, tipo de letra, tamaño de letra, color, formato, bordes, tramados, etc.
Además, puedo mostrarles un mensaje a los usuarios (o sea un WAIT WINDOW .... NOWAIT) con el porcentaje que ya se ha completado de la operación, algo como: "Se ha completado el 72,56% de la planilla Excel"
Te copio a continuación la función CELDAEXCEL(), la cual se encarga de grabar en el archivo de texto el contenido que tendrá la celda especificada.
FUNCTION CeldaExcel
LParameters tnFP, tnFila, tnColumna, tuDato, tcTipoDato, tuFormatoCelda, tcPicTot
Local lnResultado
tcPicTot = iif(VarType(tcPicTot) <> "C", "999,999,999,999", tcPicTot)
tuDato = iif(VarType(tuDato) == "N", Transform(tuDato, tcPicTot), tuDato)
tuDato = iif(VarType(tuDato) == "D", DtoC(tuDato), tuDato)
tcTipoDato = Upper(tcTipoDato)
tuFormatoCelda = iif(VarType(tuFormatoCelda) <> "C", "", tuFormatoCelda)
* Formato Celda
* -------------
* FN = FontName (Arial, Courier New, etc.)
* FS = FontSize (8, 10, 12, etc.)
* FB = FontBold (.F., .T.)
* HA = HorizontalAlignment (1 = General, 2 = Izquierda, 3 = Centrar, 4 = Derecha)
* NF = NumberFormat ("#,##0.00_)", "m/d/yy", "$#,##0.00_);[Rojo]($#,##0.00)")
* CI = .Interior.ColorIndex (1 = , 2= )
* PA = .Interior.Pattern (1 = Sólido, ...)
lnResultado = FPutS(tnFP, Str(tnFila) + "|" + Str(tnColumna, 20) + "|" + tuDato + "|" + tcTipoDato + "|" + tuFormatoCelda)
Return(lnResultado)
*
*
Saludos.
Walter.