DocAp combinado Calc+Calc+Writer
También es posible crear docap complejos empleando dos archivos del mismo servicio: dos hojas de cálculo o dos documentos de texto, pero tampoco tenemos por qué limitarnos a utilizar dos documentos.
En esta entrada me limito a explicar el funcionamiento de este modelo de docap y muestro las instrucciones fundamentales de su código, pero si deseas saber qué objetivo se persigue con el DocAp en concreto que utilizo de ejemplo, deberás leer [esta entrada]. Veamos ahora su estructura de componentes empezando por visualizar su esquema general.
oHojaDatos = ThisComponent.getSheets().getByName("Datos")For i = 1 To 3oCelda = oHojaDatos.getCellRangeByName("B" & i)sDatosPer(i-1) = oCelda.getString()Next
For i= 1 To 500
oCeldaInicio = oHojaLista.getCellByPosition(0,i)
sContenido = oCeldaInicio.getString()
If sContenido = "" Then
For a =0 To 4
oCeldaInicio = oHojaLista.getCellByPosition(a,i)
oCeldaInicio.setString(mListado(a))
Next
Exit For
End If
Next
mOpciones(0).Name="AsTemplate"mOpciones(0).Value=TruemOpciones(0).Name="MacroExecutionMode"mOpciones(0).Value=4sRuta = ConvertToUrl("D:\ModeloExpediente.ods")oDoc = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mOpciones() )
Segunda: La plantilla Ficha genera automáticamente el documento que concreta la ficha del alumno y que se archiva dentro de la carpeta Expedientes. Dentro de este archivo se concreta el doble proceso de traslado de datos al listado de campos y su asociación a un conjunto de celdas que muestras dichos datos en formato ficha (de ahí el nombre del documento.
Posteriormente se accede al contenidos de determinados campos...
For i=0 To 10
oCelda(i) = oHojaDatos.getCellRangeByName( "A" & i+1 )
sDatos(i) = oCelda(i).getString
Next
... para posteriormente analizar los datos que contienen y que se consideran relevantes (2).
If iTotalDif = 0 Then
sValorDif = " no existe diferencia en cuanto al númer de documentos, lo que indica que el expediente se ha mantenido actualizado hasta el momento."
ElseIf iTotalDif > 0 Then
sValorDif = "una reducción del número de archivos (" & ABS(iTotalDif) & " documentos)"
ElseIf iTotalDif < 0 Then
sValorDif = "un incremento del número de archivos (" & ABS(iTotalDif) & " documentos)"
End If
If dPorcentajeDif > 25 Then
CrearInfo (sIdentificador,sNumDoc,sAnalisisTotal,sValoraPorcentaje)
Else
MsgBox ("ANÁLISIS DE RESULTADOS: " & Chr(13) & sIdentificador & Chr(13) & sNumDoc & " " & sAnalisisTotal & " " & sValoraPorcentaje)
End If
Tercera: Esta fase se desarrolla bien dentro de Ficha, cuando no se considera necesario crear un informe (3) o, y de forma más específica y compleja, a partir del propio documento Writer Informe. En este caso se puede (también es opcional) aplicar una macro de formato. Esta macro es universal, pero podría estar específicamente creada para formatear dicho documento, aunque necesariamente deberá ser ubicada en Mis macros (4)
dim args4(4) as new com.sun.star.beans.PropertyValue
args4(0).Name = "CharFontName.StyleName"
args4(0).Value = ""
args4(1).Name = "CharFontName.Pitch"
args4(1).Value = 2
args4(2).Name = "CharFontName.CharSet"
args4(2).Value = -1
args4(3).Name = "CharFontName.Family"
args4(3).Value = 5
args4(4).Name = "CharFontName.FamilyName"
args4(4).Value = "Verdana"
dispatcher.executeDispatch(document, ".uno:CharFontName", "", 0, args4())




