Pasar varios libros de excel a TXT

Tengo una carpeta con 250 libros en excel y debo guardar cada libro en txt, ¿hay una macro que me ayude a ejecutar esta instrucción sin abrir los 250 libros?

1 respuesta

Respuesta
2

Para pasar los datos a txt es necesario abrir el libro y guardar como txt.

Se puede hacer un ciclo: abrir, pasar a txt, cerrar el libro.


Si quieres ayuda, puedes poner con detalle qué quieres hacer.

1. El libro puede tener varias hojas, cuál hoja quieres pasar a txt.

2. En dónde guardar el txt.

3. Cómo se va a llamar el archivo txt.

4. Qué formato de txt quieres, puedes poner un ejemplo.


Nota: Una cosa que debes tener en cuenta cuando haces una pregunta en un foro ... las personas a las que solicitas ayuda no saben absolutamente nada acerca de tus datos, absolutamente nada sobre cómo están en el libro de trabajo, absolutamente nada sobre lo que tú quieres que se haga con él y absolutamente nada sobre cómo quieres el resultado ... debes ser muy específico al describir cada una de estas áreas, en detalle, y no debes suponer que seremos capaces de "resolverlo" por nuestra cuenta. Recuerda, nos estás pidiendo ayuda ... así que ayúdanos, brindando la información que necesitamos para hacerlo, incluso si esa información te parece "obvia" (recuerda, sólo es obvia para ti porque estás familiarizado con tus datos, su diseño y el objetivo general para ellos).

Perdón por no ser más detallista

El libro solo tiene una hoja, voy a guardarla en una carpeta que tengo en el escritorio, el txt se va a llamar igual que el libro y el txt va separdo por un =

Gracias por la ayuda

Faltan datos.

En cuál carpeta están los libros.

Inicia la Grabadora de macros realiza lo siguiente:

Abre uno de tus archivos de excel. Guarda la hoja con el formato de texto deseado. Cierra el archivo.

Regresa a detener la macro.

Pega aquí la macro.

Hola, gracias por tu paciencia y por tu ayuda.

En cuanto al formato, estoy un poco confundida, porque no se cual es el adecuado para este caso.

Mira esta es la macro que uso para crearlos y donde quedan guardados:

Sub Macro2()

Dim RutaArchivo As String
Dim sh As Worksheet
Dim ho As Worksheet
Dim l2 As Workbook
Dim i As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set sh = Sheets("Hoja1")
Set ho = Sheets("Hoja2")
RutaArchivo = "C:\Users\Usuario\Documents\Pruebas\"

For i = 2 To sh.Range("A" & Rows.Count).End(3).Row
Set l2 = Workbooks.Add
With l2.Sheets(1)
.Cells.NumberFormat = "@"
.Range("A1:A61").Value = Application.Transpose(ho.Range("A1:BI1").Value)
.Range("B1:B61").Value = Application.Transpose(ho.Range("A2:BI2").Value)
.Range("B4:B11").Value = Application.Transpose(sh.Range("A" & i & ":H" & i).Value)
.Range("B13:B14").Value = Application.Transpose(sh.Range("I" & i & ":J" & i).Value)
.Range("B19").Value = Application.Transpose(sh.Range("K" & i & ":K" & i).Value)
.Range("B28:B61").Value = Application.Transpose(sh.Range("L" & i & ":AS" & i).Value)
.Range("B1:B70").HorizontalAlignment = xlLeft
l2.SaveAs RutaArchivo & "20211030" & "_" & .Range("B32").Value & ".xls", xlNormal
l2.Close False
End With
Next
Application.ScreenUpdating = True
MsgBox "El proceso ha terminado", vbInformation
End Sub

y quiero que quede en una carpeta que esta en la siguiente ruta

C:\Users\Usuario\Documents\pruebas txt\

Los archivo deben quedar separados con un =, cada libro tiene dos columnas, una sola hoja.

Agradecida con tu ayuda!

En cuanto al formato, estoy un poco confundida, porque no se cual es el adecuado para este caso.

Sube a la red 2 archivos. El archivo de excel y el archivo de texto con el formato que quieres. Para que yo pueda ver el archivo de excel original y el resultado en el archivo texto que tú deseas.

Utiliza google drive para compartir archivos. Comparte el archivo con la opción a "Cualquier persona que tenga el vínculo". Copia el vínculo de cada archivo y lo pegas aquí.


Sería mejor que en esa misma macro guarde el archivo como excel y al mismo tiempo guarde el archivo como txt. Pero necesito saber cómo quieres el archivo txt.

Sube los 2 archivos a la red y los reviso.

Hola

Gracias por continuar ayudándome

Te adjunto el enlace

https://drive.google.com/drive/folders/1A_BmD3uTpwHzw9QPRmXT2fhWFJYV3xap?usp=sharing  

El archivo de excel tiene 2 hojas. Habías comentado que solamente tenía una hoja.

El archivo txt no es un archivo txt, es un archivo en word.

Los datos de archivo de excel no coinciden con los datos que vienen en el archivo de wrod.


Puedes subir otros 2 archivos, pero que sean coincidentes.

Necesito ver realmente cómo está el archivo de excel. Con una hoja y con los datos originales.

Necesito ver cómo quieres el archivo txt, pero un archivo txt no un archivo de word.

Te ayudo un poco.

Ya ejecuté la macro y resulta un archivo de excel así:

Y así quieres el archivo txt:


Nota: Observa como mis ejemplos tienen relación, los datos del archivo de excel son los mismos datos que el archivo txt. Así es como se debe presentar un ejemplo.


Me confirmas si es así como quieres el resultado.

Te paso la Macro2 actualizada para crear el archivo txt y también el archivo xls.

Copia todo el código en un módulo y ejecuta la macro Macro2.

Sub Macro2()
'Por.Dante Amor
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim Ruta As String, Archivo As String
  Dim l2 As Workbook
  Dim i As Long
  '
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  '
  Set sh1 = Sheets("Hoja1")
  Set sh2 = Sheets("Hoja2")
  Ruta = "C:\Users\Usuario\Documents\Pruebas\"
  '
  For i = 2 To sh1.Range("A" & Rows.Count).End(3).Row
    Set l2 = Workbooks.Add
    With l2.Sheets(1)
      .Cells.NumberFormat = "@"
      .Range("A1:A61").Value = Application.Transpose(sh2.Range("A1:BI1").Value)
      .Range("B1:B61").Value = Application.Transpose(sh2.Range("A2:BI2").Value)
      .Range("B4:B11").Value = Application.Transpose(sh1.Range("A" & i & ":H" & i).Value)
      .Range("B13:B14").Value = Application.Transpose(sh1.Range("I" & i & ":J" & i).Value)
      .Range("B19").Value = Application.Transpose(sh1.Range("K" & i & ":K" & i).Value)
      .Range("B28:B61").Value = Application.Transpose(sh1.Range("L" & i & ":AS" & i).Value)
      .Range("B1:B70").HorizontalAlignment = xlLeft
      '
      Archivo = "20211030" & "_" & .Range("B32").Value
      '
      Call CreaTxt(l2, Ruta, Archivo)
      '
      l2.SaveAs Ruta & Archivo & ".xls", xlNormal
      l2.Close False
    End With
  Next
  Application.ScreenUpdating = True
  MsgBox "El proceso ha terminado", vbInformation
End Sub
'
Sub CreaTxt(l2 As Workbook, Ruta As String, Archivo As String)
'Por.Dante Amor
  Dim nFileNum As Long, j As Long
  '
  With l2.Sheets(1)
    nFileNum = FreeFile
    Open Ruta & Archivo & ".txt" For Output As #nFileNum
    For j = 1 To .Range("A" & Rows.Count).End(3).Row
      Print #nFileNum, .Range("A" & j) & "=" & .Range("B" & j)
    Next
    Close #nFileNum
  End With
End Sub

¡Gracias! 

De verdad mil gracias por tu ayuda. Eres super buenísimo con el Excel!

Bendiciones!!!!

Una ultima molestia, si una celda queda en blanco, como en es el caso de FechaRetiro, existe alguna forma que me permita eliminar esa fila sin que se corran las demás, teniendo en cuenta que una parte del nombre es de una celda ya especifica(TrabNumDoc), que es la celda (B32). Tenia una macro que la elimina pero me corre hacia arriba una fila, obviamente, no se si exista algo que la elimine sin subir las celdas.

De nuevo mil gracias por la ayuda

No entiendo.

Quieres eliminar la fila 5 o la fila 32.

Para estos casos es cuando debes poner 2 imágenes una mostrando cómo están los datos y en otra imagen mostrando el resultado que tú deseas.

[No olvides valorar.

Necesito eliminar la fila 5 porque esta vacía

Y dejar la 32 que siga siendo 32

Entonces solamente quieres borrar los datos de la fila 5, quedaría (te faltó la imagen)

Ayúdame a ayudarte, pon los datos completos.

Algo como esto:

Prueba lo siguiente:

Sub Macro2()
'Por.Dante Amor
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim Ruta As String, Archivo As String
  Dim l2 As Workbook
  Dim i As Long, k As Long
  '
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  '
  Set sh1 = Sheets("Hoja1")
  Set sh2 = Sheets("Hoja2")
  Ruta = "C:\Users\Usuario\Documents\Pruebas\"
  Ruta = "C:\trabajo\entrada\"
  '
  For i = 2 To sh1.Range("A" & Rows.Count).End(3).Row
    Set l2 = Workbooks.Add
    With l2.Sheets(1)
      .Cells.NumberFormat = "@"
      .Range("A1:A61").Value = Application.Transpose(sh2.Range("A1:BI1").Value)
      .Range("B1:B61").Value = Application.Transpose(sh2.Range("A2:BI2").Value)
      .Range("B4:B11").Value = Application.Transpose(sh1.Range("A" & i & ":H" & i).Value)
      .Range("B13:B14").Value = Application.Transpose(sh1.Range("I" & i & ":J" & i).Value)
      .Range("B19").Value = Application.Transpose(sh1.Range("K" & i & ":K" & i).Value)
      .Range("B28:B61").Value = Application.Transpose(sh1.Range("L" & i & ":AS" & i).Value)
      .Range("B1:B70").HorizontalAlignment = xlLeft
      '
      'Eliminar datos en blanco
      For k = 1 To .Range("A" & Rows.Count).End(3).Row
        If .Range("B" & k).Value = "" Then .Range("A" & k).Value = ""
      Next
      '
      Archivo = "20211030" & "_" & .Range("B32").Value
      '
      Call CreaTxt(l2, Ruta, Archivo)
      '
      l2.SaveAs Ruta & Archivo & ".xls", xlNormal
      l2.Close False
    End With
  Next
  Application.ScreenUpdating = True
  MsgBox "El proceso ha terminado", vbInformation
End Sub
'
Sub CreaTxt(l2 As Workbook, Ruta As String, Archivo As String)
'Por.Dante Amor
  Dim nFileNum As Long, j As Long
  '
  With l2.Sheets(1)
    nFileNum = FreeFile
    Open Ruta & Archivo & ".txt" For Output As #nFileNum
    For j = 1 To .Range("A" & Rows.Count).End(3).Row
      Print #nFileNum, .Range("A" & j) & "=" & .Range("B" & j)
    Next
    Close #nFileNum
  End With
End Sub

[No olvides valorar las respuestas.

Gracias

en el txt queda el =

CodEncoding=UTF-8
TipoXML=102
Novedad=false
FechaIngreso=2021-08-02
=
FechLiquiIni=2021-10-01

y debe quedar

CodEncoding=UTF-8
TipoXML=102
Novedad=false
FechaIngreso=2021-08-02
FechLiquiIni=2021-10-01

¿En serio?

Vas a calificar mi respuesta con "Buena".


En fin, voy a poner la macro completa con lo último que pediste, que no estaba en tu petición original. Porque me gusta entregar las respuestas completas.

Sub Macro2()
'Por.Dante Amor
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim Ruta As String, Archivo As String
  Dim l2 As Workbook
  Dim i As Long, k As Long
  '
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  '
  Set sh1 = Sheets("Hoja1")
  Set sh2 = Sheets("Hoja2")
  Ruta = "C:\Users\Usuario\Documents\Pruebas\"
  '
  For i = 2 To sh1.Range("A" & Rows.Count).End(3).Row
    Set l2 = Workbooks.Add
    With l2.Sheets(1)
      .Cells.NumberFormat = "@"
      .Range("A1:A61").Value = Application.Transpose(sh2.Range("A1:BI1").Value)
      .Range("B1:B61").Value = Application.Transpose(sh2.Range("A2:BI2").Value)
      .Range("B4:B11").Value = Application.Transpose(sh1.Range("A" & i & ":H" & i).Value)
      .Range("B13:B14").Value = Application.Transpose(sh1.Range("I" & i & ":J" & i).Value)
      .Range("B19").Value = Application.Transpose(sh1.Range("K" & i & ":K" & i).Value)
      .Range("B28:B61").Value = Application.Transpose(sh1.Range("L" & i & ":AS" & i).Value)
      .Range("B1:B70").HorizontalAlignment = xlLeft
      '
      Archivo = "20211030" & "_" & .Range("B32").Value
      '
      Call CreaTxt(l2, Ruta, Archivo)
      '
      l2.SaveAs Ruta & Archivo & ".xls", xlNormal
      l2.Close False
    End With
  Next
  Application.ScreenUpdating = True
  MsgBox "El proceso ha terminado", vbInformation
End Sub
'
Sub CreaTxt(l2 As Workbook, Ruta As String, Archivo As String)
'Por.Dante Amor
  Dim nFileNum As Long, j As Long
  '
  With l2.Sheets(1)
    nFileNum = FreeFile
    Open Ruta & Archivo & ".txt" For Output As #nFileNum
    For j = 1 To .Range("A" & Rows.Count).End(3).Row
      If .Range("B" & j).Value = "" Then
        .Range("A" & j).Value = ""
        Print #nFileNum,
      Else
        Print #nFileNum, .Range("A" & j) & "=" & .Range("B" & j)
      End If
    Next
    Close #nFileNum
  End With
End Sub

Si en el archivo txt no quieres la fila vacía, entonces borra esta línea:

Print #nFileNum,

Ni te molestes en corregir la valoración. Ya no te voy a brindar mi ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas