Modelo listado (base de datos)
Además de los procedimientos anteriores, también podemos automatizar la generación de acreditaciones basándonos en la elección de un determinado registro de una base de datos (Calc).
Se trata de una opción basada en el uso de marcadores que tiene como peculiaridad la posibilidad de seleccionar el registro mediante la ubicación previa del cursos en el campos A del registro deseado de nuestra base de datos.
Veamos el script:
Sub TransferirDatosAcreditacionDim oDocCalc As ObjectDim oSel As ObjectDim oHoja As ObjectDim nFila As IntegerDim f As IntegerDim nRespuesta As Integer
'Avisos de inicioMsgBox "Para el correcto funcionamiento del script debe posicionarse en la celda que desee de la columna A"MsgBox "Por favor, seleccione la primera celda de la fila para posicionarte en el registro a imprimir.", 16, "Error"' 1. CONFIGURACIÓN DE MATRICES' Define aquí los nombres de las columnas (solo para el mensaje)' y los nombres exactos de los marcadores en Writer.Dim vCampos(23) As StringDim vMarcadores() As StringvMarcadores = Array("Curso", "fecha", "SEO", "Orienta", "NIE", "Nombre", "Apellidos", "FNac","Edad","CursoS","Madre","DNI","Domicilio","CP","Tlf","nesc","ccent","otras","nee","neae","flugar","Ffecha")
' 2. UBICAR CELDA ACTIVAoDocCalc = ThisComponentoSel = oDocCalc.CurrentSelection' Validar que hay una celda seleccionadaIf Not oSel.supportsService("com.sun.star.sheet.SheetCellRange") ThenMsgBox "Por favor, seleccione la primera celda de la fila para posicionarte en el registro a imprimir.", 16, "Error"Exit SubEnd IfnFila = oSel.CellAddress.RowoHoja = oDocCalc.Sheets(oSel.CellAddress.Sheet)' 3. AVISO AL USUARIOnRespuesta = MsgBox("Se tomarán los datos de la fila " & (nFila + 1) & "." & Chr(13) & _"¿Desea continuar?", 33, "Confirmar Registro")If nRespuesta <> 1 Then Exit Sub' 4. RECORRER COLUMNAS DE CALC (Bucle 1)' Guardamos los datos de la fila en una matriz temporalDim nLimite As IntegernLimite = UBound(vMarcadores) ' Obtiene el índice máximo de la matrizDim vDatosExtraidos(nLimite) As StringDim i As IntegerFor i = 0 To nLimitevCampos(i) = oHoja.getCellByPosition(i, nFila).StringNext i' 5. ACCESO A WRITERDim oDocWriter As ObjectDim oMarcadores As ObjectDim sUrl As String' Acceso al documentosUrl = convertToURL("C:\Users\acredita_writeb.ott") 'Sustituya esta dirección por la que corresponda según su organización de archivosoDocWriter = StarDesktop.loadComponentFromURL(sUrl, "_blank", 0, Array())If IsNull(oDocWriter) ThenMsgBox "No se encontró el archivo de destino.", 16, "Error"Exit SubEnd IfoMarcadores = oDocWriter.Bookmarks' 6. POSICIONAR CONTENIDOS EN MARCADORES (Bucle 2)For i = 0 To nLimiteDim sNombreMarcador As StringsNombreMarcador = vMarcadores(i)If oMarcadores.hasByName(sNombreMarcador) Then' Insertamos el dato correspondiente de nuestra matriz de datosoMarcadores.getByName(sNombreMarcador).getAnchor().setString(vCampos(i))Else' Opcional: Avisar si falta un marcador (que no debería)MsgBox "Aviso: No se encontró el marcador " & sNombreMarcador, 48End IfNext iMsgBox "Se han transferido " & (nLimite + 1) & " campos correctamente.", 64, "Éxito"End Sub
Acuérdate de cambiar la ruta de tu documento-plantilla acredita_writeb.ott; hazlo como ruta absoluta para evitar fallos. Para ello es suficiente con que, después de descargados los documento y reubicados en tu sistema, selecciones el documento write, hagas clic derecho sobre él y selecciones la opción "Copiar como ruta de acceso"; después sólo tienes que pegar esa ruta como alternativa a la que aparece en la línea de instrucciones del script.
Documentos. Desde aquí y desde aquí accedes a los documentos que deberás descargar. Recuerda que trabajas desde LibreOffice.
