Vincular respuestas de un formulario en Writer (.odt) en un Calc (.ods) o Base (.odb)

¡Hola comunidad!
Tenemos hecho un Writer (.odt) en modo Formulario. Quisiéramos que los datos que se introduzcan puedan ser “pasados” o a una hoja de Calc (.ods) o a una base de datos de Base (.odb). Así no perderíamos los datos introducidos ni tendríamos que pasarlos uno a uno.
Ruego nos ayuden a poder vincular para volcar dichos datos. ¡¡Gracias!!

En el archivo formulario es necesario que asignes un nombre identificador a cada campo, si para ejemplo utilizamos Nombre, Apellido, Edad, Correo, estos serían: txtNombre, txtApellido, txtEdad, txtCorreo, supongamos que tu archivo se llama formulario.odt.

Necesitas crear la base de datos correspondiente en Base

Al iniciar se abrirá el asistente de base de datos.

Selecciona —> Crear una nueva base de datos—> Siguiente.

Verifica que este seleccionada la opción —> Sí, registrar la base de datos para mí

Haz clic en —> Finalizar.

Guarda la base de datos: en un directorio donde se encuentre el archivo de Writer y asigna un nombre (por ejemplo, datos.odb).

En la ventana principal de Base pulsa en el panel izquierdo—> Tablas —> Crear tabla en vista Diseño…

Para cada dato que recopilarás del formulario, define un campo en la tabla, por ejemplo:

Nombre del campo	Tipo de dato
ID	                Entero        [autoincremental]
Nombre	            Texto         (VARCHAR)
Apellido         	Texto         (VARCHAR)
Edad	            Entero pequeño
Correo	            Texto         (VARCHAR)

Al campo ID autoincremental, selecciónalo con el botón derecho y elige —> Clave primaria

Cierra la ventana de diseño de la tabla. Se te pedirá que le asignes un nombre (por ejemplo, Inscripciones).

Aceptar

En Base —> Herramientas —> Macros —> Organizar macros —> LibreOffice Basic.

Selecciona la base creada, datos.odb y haz clic en —>Nuevo.

Asigna un nombre al módulo, por ejemplo, ImportarDatos.

Haz clic en Editar.​

Y Debes insertar el código de la macro

Uno tentativo sería:

Sub ImportarFormulario
    Dim oDoc As Object
    Dim oForm As Object
    Dim oFields As Object
    Dim sNombre As String
    Dim sApellido As String
    Dim iEdad As Integer
    Dim sCorreo As String
    Dim oDBContext As Object
    Dim oDataSource As Object
    Dim oConnection As Object
    Dim oStatement As Object
    Dim sSQL As String

    ' Seleccionar el archivo del formulario
    oDoc = StarDesktop.loadComponentFromURL("file:///ruta/al/formulario.odt", "_blank", 0, Array())

    ' Acceder al formulario
    oForm = oDoc.DrawPage.Forms.getByIndex(0)

    ' Obtener los valores de los campos
    sNombre = oForm.getByName("txtNombre").Text
    sApellido = oForm.getByName("txtApellido").Text
    iEdad = CInt(oForm.getByName("txtEdad").Text)
    sCorreo = oForm.getByName("txtCorreo").Text

    ' Conectar a la base de datos
    oDBContext = createUnoService("com.sun.star.sdb.DatabaseContext")
    oDataSource = oDBContext.getByName("datos")
    oConnection = oDataSource.getConnection("", "")
    oStatement = oConnection.createStatement()

    ' Insertar los datos en la tabla
    sSQL = "INSERT INTO ""datos"" (""Nombre"", ""Apellido"", ""Edad"", ""Correo"") VALUES ('" & sNombre & "', '" & sApellido & "', " & iEdad & ", '" & sCorreo & "')"
    oStatement.executeUpdate(sSQL)

    MsgBox "Datos importados correctamente."

    oDoc.close(True)
End Sub

Para ejecutar la macro:

Herramientas —> Macros—> Ejecutar macro.

Selecciona —> datos.odb —> ImportarDatos —> Importarformulario`.

Ejecutar.

Usa un formulario de Base directamente en esa base de datos, el usuario casi no vera la diferencia…