viernes, 6 de febrero de 2026

Acreditación

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 TransferirDatosAcreditacion

    Dim oDocCalc As Object
    Dim oSel As Object
    Dim oHoja As Object
    Dim nFila As Integer
    Dim f As Integer
    Dim nRespuesta As Integer 
'Avisos de inicio
MsgBox "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 String
    Dim vMarcadores() As String
    
    vMarcadores = 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 ACTIVA
    oDocCalc = ThisComponent
    oSel = oDocCalc.CurrentSelection
    
    ' Validar que hay una celda seleccionada
    If Not oSel.supportsService("com.sun.star.sheet.SheetCellRange") Then
        MsgBox "Por favor, seleccione la primera celda de la fila para posicionarte en el registro a imprimir.", 16, "Error"
        Exit Sub
    End If
    
    nFila = oSel.CellAddress.Row
    oHoja = oDocCalc.Sheets(oSel.CellAddress.Sheet)
    
    ' 3. AVISO AL USUARIO
    nRespuesta = 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 temporal
    Dim nLimite As Integer
    nLimite = UBound(vMarcadores) ' Obtiene el índice máximo de la matriz
    
    Dim vDatosExtraidos(nLimite) As String
    Dim i As Integer
    
    For i = 0 To nLimite
        vCampos(i) = oHoja.getCellByPosition(i, nFila).String
    Next i
    
' 5. ACCESO A WRITER
   Dim oDocWriter As Object
   Dim oMarcadores As Object
   Dim sUrl As String
    
   ' Acceso al documento
   sUrl = convertToURL("C:\Users\acredita_writeb.ott") 'Sustituya esta dirección por la que corresponda según su organización de archivos
   oDocWriter = StarDesktop.loadComponentFromURL(sUrl, "_blank", 0, Array())
    
   If IsNull(oDocWriter) Then
      MsgBox "No se encontró el archivo de destino.", 16, "Error"
      Exit Sub
   End If

   oMarcadores = oDocWriter.Bookmarks

' 6. POSICIONAR CONTENIDOS EN MARCADORES (Bucle 2)
   For i = 0 To nLimite
    Dim sNombreMarcador As String
    sNombreMarcador = vMarcadores(i)
        
    If oMarcadores.hasByName(sNombreMarcador) Then
    ' Insertamos el dato correspondiente de nuestra matriz de datos
      oMarcadores.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, 48
    End If
    Next i

    MsgBox "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.