txt - vba read text file line by line
Apertura de archivo CSV delimitado por punto y coma (8)
Aquí está el método OpenText
de Excel 2000:
Método OpenText
Carga y analiza un archivo de texto como un nuevo libro de trabajo con una sola hoja que contiene los datos del archivo de texto analizado.
Sintaxis
expression .OpenText ( Nombre de archivo, Origen, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator )
y aquí está la versión de Excel 2003:
Método OpenText [Referencia de lenguaje VBA de Excel 2003]
Carga y analiza un archivo de texto como un nuevo libro de trabajo con una sola hoja que contiene los datos del archivo de texto analizado.
expresión .OpenText ( FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local )
tan Local
era de hecho un nuevo parámetro para Excel 2003 y no funcionará en Excel 2000
No tengo idea de la causa del comportamiento erróneo. El parámetro Local
se define como:
Variante opcional local . Especifique True si la configuración regional de la máquina debe usarse para separadores, números y formato de datos.
Es posible que desee verificar dos veces la configuración regional en la PC Excel 2000 y verificar si hay algo que pueda hacer que la información se interprete erróneamente. Además, intente especificar explícitamente los parámetros DecimalSeparator
y ThousandsSeparator
en el método Excel 2000 y vea si eso ayuda
¿Cómo se abre un archivo CSV delimitado por punto y coma con VBA en Excel 2000?
Data de muestra
An ID;TEST20090222
A Name;Firstname Surname
A Date;11.05.2000
Country:;SomeCountryName
Currency;EUR
CostA;
CostB;
CostC;
Part1;10;20;30
Part2;;;;
Part3;34;56;87
Código
En Excel 2003 11.8231.8221 SP3 con VBA 6.5.1025, puedo abrir un archivo delimitado por punto y coma con el siguiente código VBA:
Workbooks.OpenText filename:=myFilename, _
DataType:=xlDelimited, Semicolon:=True, Local:=True
Sin embargo, cuando se ejecuta el mismo código en Excel 2000 9.0.8961 SP1 con VBA 6.5.1025, aparece el siguiente error:
Error de compilación: argumento con nombre no encontrado
Eso es --pienso-- porque Excel 2000 no conoce el argumento llamado "Local".
Por lo tanto, eliminé la parte "Local: = True". Pero el problema es que una línea completa del archivo CSV se escribe en una celda en lugar de dividirse en partes separadas por punto y coma.
Busqué en Internet una solución, pero no encontré nada útil y conciso.
¿Algunas ideas?
[Actualización 17.02.2009]
Intenté la sugerencia del usuario lc con el grabador de macros. Sin embargo, los resultados fueron confusos.
Cuando abro el archivo CSV con el menú Archivo-> Abrir ... y luego selecciono el archivo CSV, los datos separados por punto y coma se analizan correctamente. Y el código grabado es tan simple como:
Workbooks.Open filename:= _
"D:/testdata/Example 01 CSV/input.csv"
Pero cuando uso ese código VBA en mi macro, cada línea termina en una celda nuevamente.
De acuerdo con la sugerencia del usuario barrowc , también cambié la configuración de "Configuración regional y de idioma de Windows" de "alemán (Suiza)" a "inglés (Estados Unidos)". Incluso después de reiniciar Excel, nada cambió, el mismo problema.
Me pregunto por qué está trabajando en el sistema del usuario Remou . ¿Qué configuraciones regionales y de idioma tienes?
Encuentro que esto funciona para mí en Excel 2000:
Workbooks.OpenText filename:=myFilename, _
DataType:=xlDelimited, Semicolon:=True
No estoy seguro, pero puede intentar grabar una macro para hacer lo mismo y verificar el código VBA que produce. Puede obtener una pista sobre lo que falta.
Una solución más: simplemente cambie el nombre de los archivos .csv a .txt y use el método OpenText.
[Actualización 22.02.2009]
Mientras tanto, resolví el problema escribiendo una función de importación en lugar de utilizar Workbooks.OpenText.
Acabo de abrir el archivo CSV como un archivo de texto, leer línea por línea, dividir cada línea en elementos separados por punto y coma y escribir cada elemento en una celda.
Sub ImportCSVFile(filepath As String)
Dim line As String
Dim arrayOfElements
Dim linenumber As Integer
Dim elementnumber As Integer
Dim element As Variant
linenumber = 0
elementnumber = 0
Open filepath For Input As #1 '' Open file for input
Do While Not EOF(1) '' Loop until end of file
linenumber = linenumber + 1
Line Input #1, line
arrayOfElements = Split(line, ";")
elementnumber = 0
For Each element In arrayOfElements
elementnumber = elementnumber + 1
Cells(linenumber, elementnumber).Value = element
Next
Loop
Close #1 '' Close file.
End Sub
Obtuve la inspiración de Shasur: http://vbadud.blogspot.com/2007/06/vba-read-text-files-with-leading.html
Todavía no sé por qué Workbooks.OpenText
no funciona en mi sistema a pesar de que parece funcionar en el sistema del usuario Remou . Supongo que podría tener algo que ver con el idioma del sistema operativo (inglés) y la configuración regional y de idioma (alemán, Suiza), pero no estoy seguro.
De todos modos, la solución funciona para mí. ¡Gracias a todos por sus sugerencias y ayuda!
a menudo la coma está marcada como verdadera como un separador donde generalmente es el separador decimal. Agrega DecimalSeparator: = "," y Bob es tu tío
Re Alguna idea?
Si quiere arreglar un archivo para otros usando Excel, agregue esto en la primera línea del archivo sin las comillas seguidas por un salto de línea: "sep =;"
Una manera fácil de abrir manualmente los archivos estúpidos es cambiar el nombre de la extensión a .txt o .htm y, a continuación, usar excel File - Open.
Desde VBA recomiendo buscar el método en MSDN y especificar manualmente cada parámetro, mi experiencia fue que esto eliminó la mayoría de los problemas regionales.
Yo prefiero:
Workbooks.Open fileName:=myFilename, UpdateLinks:=False, Local:=True