............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Cargar un txt "enorme"

Ver el tema anterior Ver el tema siguiente Ir abajo

Cargar un txt "enorme"

Mensaje por msylvestre66 el Vie Jul 15, 2011 7:37 pm

Buenas tardes.

Tengo la necesidad de cargar un archivo plano.
Los problemas que tengo son, uno que mi excel solo tiene 65536 renglones.
y mi archivo txt, tiene 710 mil

Uso este macro para abrir un txt normal.
____________________________
Código:
Sub abtxt2()
'
' abtxt2 Macro
' Macro grabada el 15/07/2011 por M@rco A Pérez V.
'

'
Range("A1").Select
ChDir "C:\Documents and Settings\Contabilidad\Escritorio"
Workbooks.OpenText Filename:= _
"C:\Documents and Settings\Contabilidad\Escritorio\dbd.txt", Origin:=xlMSDOS _
, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False _
, Space:=False, Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1 _
), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
TrailingMinusNumbers:=True
Range("I18").Select
Columns("A:A").EntireColumn.AutoFit
End Sub
_____________________________________
Pero no le encuentro donde decirle, que lo carge en hojas subsecuentes.
Es decir, que cargue mi archivo en tantas hojas como sean necesarias.

Gracias por su ayuda.

msylvestre66

Masculino Cantidad de envíos : 79
Edad : 54
Ciudad - Pais : Estado de México
Version de Excel : W8 Excel 2007 y 2010
Fecha de inscripción : 18/06/2009

Volver arriba Ir abajo

Re: Cargar un txt "enorme"

Mensaje por Cacho R el Vie Jul 15, 2011 11:05 pm

Hola! msylvestre66.
En un módulo común incorpora el siguiente código:

Código:
Sub Importar_y_Distribuir()
Dim ii As Long
Const myFile As String = "C:\Prueba.txt"
Application.ScreenUpdating = False
ii = 1

Do
  QTAdd ii, myFile
  ii = ii + 65536
Loop Until IsEmpty([a1])

Application.DisplayAlerts = False: ActiveSheet.Delete: Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Private Sub QTAdd(RowFrom As Long, FileName As String)
Sheets.Add After:=Sheets(Sheets.Count)
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileName, Destination:=Range("$A$1"))
  .Name = "Prueba"
  .FieldNames = True
  .RowNumbers = False
  .FillAdjacentFormulas = False
  .PreserveFormatting = True
  .RefreshOnFileOpen = False
  .RefreshStyle = xlInsertDeleteCells
  .SavePassword = False
  .SaveData = True
  .AdjustColumnWidth = True
  .RefreshPeriod = 0
  .TextFilePromptOnRefresh = False
  .TextFilePlatform = 850
  .TextFileStartRow = RowFrom
  .TextFileParseType = xlDelimited
  .TextFileTextQualifier = xlTextQualifierDoubleQuote
  .TextFileConsecutiveDelimiter = False
  .TextFileTabDelimiter = False
  .TextFileSemicolonDelimiter = False
  .TextFileCommaDelimiter = False
  .TextFileSpaceDelimiter = False
  .TextFileOtherDelimiter = "|"
  .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
  .TextFileTrailingMinusNumbers = True
  .Refresh BackgroundQuery:=False
End With
End Sub
Observa que al procedimiento "QTAdd" le pasas -tan sólo- dos parámetros:

-> RowFrom : La fila desde la cual comienzas a copiar los datos
-> FileName : El archivo a procesar

El primer parámetro lo maneja el propio código, mientras que el archivo queda definido mediante:

Const myFile As String = "C:\Prueba.txt"

que reemplazarás por el que te interese.

Advierte que el procedimiento mostrado presupone que los seis campos de cada línea se encuentran delimitados por un caracter "|"

¿Comentas si te fue de utilidad?...
Saludos, Cacho R.

Cacho R
Moderador
Moderador

Masculino Cantidad de envíos : 210
Ciudad - Pais : Buenos Aires
Version de Excel : Desde Multiplan (pre-Excel) hasta 2010
Fecha de inscripción : 29/06/2011

Volver arriba Ir abajo

Re: Cargar un txt "enorme"

Mensaje por Cacho R el Sáb Jul 16, 2011 1:38 pm

Otra "rápida" posibilidad es:

Código:
Sub Importar_y_Distribuir()
Dim myMatriz(), ii As Long, LineaTexto As String
Const myFile As String = "C:\Prueba.txt"
Application.ScreenUpdating = False

Open myFile For Input As #1
ReDim myMatriz(1 To Rows.Count)

Mas:
ii = 0
Do While ii <> Rows.Count
If EOF(1) Then Exit Do
Line Input #1, LineaTexto
ii = ii + 1
myMatriz(ii) = LineaTexto
Loop

If EOF(1) Then ReDim Preserve myMatriz(1 To ii)
Sheets.Add After:=Sheets(Sheets.Count)
With Range("a1:a" & ii)
  .Value = WorksheetFunction.Transpose(myMatriz)
  .TextToColumns Destination:=[a1], DataType:=xlDelimited, Other:=True, OtherChar:="|", _
    FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1))
End With
If Not EOF(1) Then GoTo Mas

Close
End Sub

Saludos, Cacho R

Cacho R
Moderador
Moderador

Masculino Cantidad de envíos : 210
Ciudad - Pais : Buenos Aires
Version de Excel : Desde Multiplan (pre-Excel) hasta 2010
Fecha de inscripción : 29/06/2011

Volver arriba Ir abajo

Re: Cargar un txt "enorme"

Mensaje por federico ramirez marron el Dom Jul 17, 2011 12:23 am

Este sirve para extraer en diferentes hojas, solo adaptalo
fuente
[Tienes que estar registrado y conectado para ver este vínculo]

Código:

Option Explicit
  Sub LargeFileImport()
 
      Dim ResultStr As String, FileName As String, FileNum As Integer, Counter As Double
   
      FileName = Application.GetOpenFilename _
            (filefilter:="Archivos de texto (*.txt),*.txt", Title:="Elegir Archivo")
      If FileName = "" Then End
     
      FileNum = FreeFile()
      Open FileName For Input As #FileNum
     
      Application.ScreenUpdating = False
      Workbooks.Add template:=xlWorksheet
      Counter = 1
      Do While Seek(FileNum) <= LOF(FileNum)
          Application.StatusBar = "Importing Row " & _
            Counter & " of text file " & FileName
         
          Line Input #FileNum, ResultStr
         
          If Left(ResultStr, 1) = "=" Then
            ActiveCell.Value = "'" & ResultStr
          Else
            ActiveCell.Value = ResultStr
          End If
          'Para versiones anteriores a Excel 97, cambiar 65536 por 16384
          If ActiveCell.Row = 65536 Then
            ActiveWorkbook.Sheets.Add
          Else
            ActiveCell.Offset(1, 0).Select
          End If
          Counter = Counter + 1
      Loop
      Close
      Application.StatusBar = False
  End Sub





federico ramirez marron

Masculino Cantidad de envíos : 95
Edad : 43
Ciudad - Pais : acapulco, gro mexico
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Cargar un txt "enorme"

Mensaje por msylvestre66 el Lun Jul 18, 2011 10:52 am

Hola buen dia.

Cacho R y Federico Ramirez Marron.

Se atraveso el fin de semana.
En casa no tengo servicio de internet.
En estos momentos empezare a checar sus opciones.
Gracias, y aviso mas tarde como me fue.


msylvestre66

Masculino Cantidad de envíos : 79
Edad : 54
Ciudad - Pais : Estado de México
Version de Excel : W8 Excel 2007 y 2010
Fecha de inscripción : 18/06/2009

Volver arriba Ir abajo

Re: Cargar un txt "enorme"

Mensaje por moises melgar el Lun Jul 18, 2011 12:31 pm

hola se ve que Microsoft Support tiene muy buen contenido,
Line Input
claro es muy bueno, gracias
yo usaba el OpenasTextStream(ForReading,)
y el .Readline
el cual aprendí de un ejemplo de la ayuda del Programador de VBA, con el Tema
OpenasTextStream(metodo)
Gracias a este foro sigo aprendiendo mucho

moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 512
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Cargar un txt "enorme"

Mensaje por msylvestre66 el Lun Jul 18, 2011 1:01 pm

Cacho R y Federico Ramirez Marron.

Gracias otra vez.

Ya cheque los codigos con los que me hicieron favor de ayudarme.
solo el primero de Cacho R, me dio un error en :
.TextFileStartRow = RowFrom
Puse algunos argumentos y no pude hacerlo correr.

Los otros dos perfectos!
Les comento que esto es para la verificacion de las facturas electronicas.
el SAT (aqui en Méx) pone a disposicion una base de datos con los folios asignados y los certificados.
Entonces, con esto es mas simple verificar las facturas electronicas.
en lugar de entrar al portal del SAT, que para variar siempre esta saturado.

muchas gracias por su tiempo.








msylvestre66

Masculino Cantidad de envíos : 79
Edad : 54
Ciudad - Pais : Estado de México
Version de Excel : W8 Excel 2007 y 2010
Fecha de inscripción : 18/06/2009

Volver arriba Ir abajo

Re: Cargar un txt "enorme"

Mensaje por Contenido patrocinado Hoy a las 11:26 pm


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.