write txt read print from vba csv excel-vba excel-2000

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 )

fuente

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 )

fuente

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