Exportar informe de Access a un archivo TXT sin saltos de líneas

Intento exportar un informe diseñado en Access a un archivo .TXT, el cual tiene campos con máscaras muy específicas y debe ser continuo, pero se insertan líneas en blanco de manera automática. ¿Cómo exportar el mencionado informe sin saltos de líneas?

1 respuesta

Respuesta
-1

Si te entiendo bien quieres exportar una serie de registros que muestras en un informe a un archivo txt con todos los valores de los campos de los diferentes registros unidos en una cadena de texto sin saltos de línea.

Por ejemplo. Tienes dos registros con dos campos. En el primer registro tienes en el campo 1 el valor de texto A, en el segundo una B, en el primer campo del segundo registro tienes una C y una D en el segundo campo del segundo registro. Para exportar esto y que en un txt te quede la secuencia ABCD sin espacios ni saltos de línea tienes que hacer la creación y el 'llenado' del txt por código. La exportación incorporada en Access te generará un salto de línea por registro.

Para ejecutar el código yo pondría un nuevo botón en el formulario desde el que llames al informe (en ese formulario puedes tener los criterios de selección de registros que muestras en el informe o...). A ese botón le copias el código que te adjunto. En el código de ejemplo que te adjunto. En él verás que se usa un recordsetclone, es decir, una copia de los registros que presentaría el informe (ya que toma el mismo origen de datos o consulta en la que esté basado el informe). Se crea una cadena de texto que contiene todos los valores en mi ejemplo de los dos campos en todos los registros que existan. Esta cadena finalmente se pasa a un procedimiento que es que crea el txt en la ruta que le indiques en el ejemplo crea el archivo c:\access\prueba1.txt

No he probado el código ya que lo he escrito sin crearme la tabla, formulario ... pero no creo que tenga errores importantes. Pruébalo y si no era esto lo que querías especifica un poco más tu pregunta.

Cordiales saludos.

Option Compare Database
Option Explicit
Private Sub ExportarATxtSinEspacios_Click()
On Error GoTo Err_ExportarATxtSinEspacios_Click
    Dim miBD As Database, misRegistros As Recordset, cuantosRegistros As Integer
    Dim miTextoUnido As String
    Dim msg As String, estilo, title As String
    Set miBD = CurrentDb
    Set misRegistros = Reports![miInformee].RecordsetClone
    With misRegistros
        .MoveLast
        .MoveFirst
        cuantosRegistros = .RecordCount
        Do Until .EOF
            miTextoUnido = miTextoUnido & !Campo1
            miTextoUnido = miTextoUnido & !Campo2
            .MoveNext
        Loop
        .Close
    End With
    Set miBD = Nothing
    If TextStreamTest(miTextoUnido) = False Then
        estilo = vbCritical + vbOKOnly
        title = "Error en la creación del archivo txt."
        msg = "Se ha producido un error en..."
        MsgBox msg, estilo, title
    Else
        estilo = vbInformation + vbOKOnly
        title = "Creación correcta del archivo txt."
        msg = "Se han exportado " & cuantosRegistros & " registros al archivo de txt..."
        MsgBox msg, estilo, title
    End If
Exit_ExportarATxtSinEspacios_Click:
    Exit Sub
Err_ExportarATxtSinEspacios_Click:
    MsgBox Err.Description
    Resume Exit_ExportarATxtSinEspacios_Click
End Sub
Function TextStreamTest(miTextoAExportar As String) As Boolean
    TextStreamTest = False
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    Dim fs, f, ts
    Set fs = CreateObject("Scripting.FileSystemObject")
    fs.CreateTextFile "c:\access\prueba1.txt"            'Crear un archivo
    Set f = fs.GetFile("c:\access\prueba1.txt")
    Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
    ts.Write miTextoAExportar
    ts.Close
    TextStreamTest = True
End Function

¡Gracias! 

En la actualidad, tomando tu ejemplo, el informe genera:

AB

CD 

y deseo un archivo TXT:

AB

CD

Será posible?

Perdona pero no entiendo tu pregunta. El código te debe de generar ABCD en el txt. ¿No te lo genera?

¿Puedes especificar que deseas en el txt, ya que lo que dices que genera y lo que deseas parece lo mismo?

Cordiales saludos.

El archivo .txt que genera el reporte es:

AB

CD (con una línea en blanco entre ambos datos).

el archivo .txt que deseo obtener debe ser:

AB
CD

Saludos

Perdona pero sigo sin comprender lo que te sucede. Por si tenía algún error el código me he creado finalmente una tabla con dos campos, un formulario continuo que accede a los registros de la tabla, y en el pie del formulario he añadido el botón para hacer la exportación.

Te incluyo nuevamente el código que he usado. El resultado es que en el txt generado hay una sola cadena ABCD que se corresponde con los valores de los dos campos en los dos registros que tengo. No hay ningún salto de linea ya que en el bucle que forma la cadena no he incluido en ningún momento las constantes vblf o vbcrlf empleadas como retorno de carro y salto de linea en VB.

Es decir, no es que tenga una linea en blanco entre los registros unidos (AB y CD), es que todos los valores deben de aparecer en una única línea (ABCD).

SI continuas con el problema intenta anexar el código que tienes asociado a tu botón para que pueda hecharle un vistazo, o si prefieres enviame una copia reducida de tu aplicación que contenga al menos la tabla y el formulario para que pueda ver que sucede ([email protected]).

Cordiales saludos.

Option Compare Database 
Option Explicit 
Private Sub ExportarATxtSinEspacios_Click() 
On Error GoTo Err_ExportarATxtSinEspacios_Click 
    Dim miBD As Database, misRegistros As Recordset, cuantosRegistros As Integer 
    Dim miTextoUnido As String 
    Dim msg As String, estilo, title As String 
    Set miBD = CurrentDb 
    Set misRegistros = Forms!ExportarTXT.RecordsetClone 
    With misRegistros 
        .MoveLast 
        .MoveFirst 
        cuantosRegistros = .RecordCount 
        Do Until .EOF 
            miTextoUnido = miTextoUnido & !Campo1 
            miTextoUnido = miTextoUnido & !Campo2 
            .MoveNext 
        Loop 
        .Close 
    End With 
    Set miBD = Nothing 
    If TextStreamTest(miTextoUnido) = False Then 
        estilo = vbCritical + vbOKOnly 
        title = "Error en la creación del archivo txt." 
        msg = "Se ha producido un error en..." 
        MsgBox msg, estilo, title 
    Else 
        estilo = vbInformation + vbOKOnly 
        title = "Creación correcta del archivo txt." 
        msg = "Se han exportado " & cuantosRegistros & " registros al archivo de txt..." 
        MsgBox msg, estilo, title 
    End If 
Exit_ExportarATxtSinEspacios_Click: 
    Exit Sub 
Err_ExportarATxtSinEspacios_Click: 
    MsgBox Err.Description 
    Resume Exit_ExportarATxtSinEspacios_Click 
End Sub 
Function TextStreamTest(miTextoAExportar As String) As Boolean 
    TextStreamTest = False 
    Const ForReading = 1, ForWriting = 2, ForAppending = 3 
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 
    Dim fs, f, ts 
    Set fs = CreateObject("Scripting.FileSystemObject") 
    fs.CreateTextFile "c:\access\pruebaXXX.txt" 
    'Crear un archivo 
    Set f = fs.GetFile("c:\access\pruebaXXX.txt") 
    Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault) 
    ts.Write miTextoAExportar 
    ts.Close 
    TextStreamTest = True 
End Function 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas