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
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
- Compartir respuesta