archivos csv

03/02/2008 - 21:20 por Patricio | Informe spam
hola amigos.
Tengo un pequeño gran problema.
Tengo un programa (InTouch), que me genera diariamente un archivo con nombre
de fecha del dia actual, y con extencion CSV, ejemplo: 20080301.csv, y mañana
sera 20080401.csv, y asi sucesivamente. Lo que necesito es, al dia siguiente
de generado este archivo, separar los datos, que me entrega, por coma, y
ordenarlos de tal forma que sean facil de interpretar, y tambien agregarles
nombres a las columnas. (para no darme la lata de ordenarlos dia a dia, para
que las demas personas lo entiendan). si alguien me puede ayudar, se lo
agradeceria bastante.

un saludo
Patricio.

Preguntas similare

Leer las respuestas

#11 Patricio
09/02/2008 - 02:39 | Informe spam
Hola.

AnSanVal, (si probé tu ejemplo :-) ) ejecute tu segundo código, con el
siguiente resultado.

En la "Hoja 1" me aparecen todos los datos bien desde la A2:Hn y separados
por comas, pero no se dividieron los valores. y como tu lo mencionaste no se
crean los nombres de las columnas.

En la "Hoja 2" si aparecen los valores divididos pero desordenados.

Héctor, me resulto todo bien, en la "Hoja 2" aparecen todos los datos
divididos, desde A2:Hn, incluyendo los nombres de las columnas.
A diferencia de la solución de AnSalVal, yo tuve que separar los datos por
coma en la "Hoja 1".

Vuelvo a agradecer su interés en ayudarme en este problema, creo que voy por
buen camino.

Saludos
Patricio.


"AnSanVal" escribió:

Hola patricio, estoy dando por hecho que el ejemplo que te ofrecí NO lo probaste. :-(

Saludos desde Tenerife.
"Patricio" escribió en el mensaje news:
Hola, Héctor.

lo primero que hago es copiar toda la columna "A" del Libro *.csv en la
columna "A" de la "Hoja 1" de un nuevo Libro *.xls. Luego hago la separación
por coma (Menú>Datos>Texto en columnas... Delimitados> Separador> Coma). En
la "Hoja 2" (de este nuevo libro) en la fila "1" desde la columna "A", hasta
la "H". lo dejo para los nombres de las columnas. Luego comienzo a copiar los
datos desde la "Hoja 1" a la "Hoja 2":

Fila "2"
[A2]=Hoja1!A1 [B2]=Hoja1!B1 [C2]=REDONDEAR(Hoja1!C1/1000000;2)
[D2]=REDONDEAR(Hoja1!D1/1000000;2) [E2]=REDONDEAR(Hoja1!C2/1000000;2)
[F2]=REDONDEAR(Hoja1!D2/1000000;2) [G2]=REDONDEAR(Hoja1!C3/1000000;2)
[H2]=REDONDEAR(Hoja1!D3/1000000;2)

esta seria la primera fila con datos. Esta fila la selecciono y la copio en
las demás filas, y de ahí tengo que comenzar a eliminar las filas que no me
sirven: dejo 1 y elimino 2, avanzo 1 y elimino 2 y así sucesivamente, para
dejarlo así:

Fila "3"
[A3]=Hoja1!A4 [B3]=Hoja1!B4 [C3]=REDONDEAR(Hoja1!C4/1000000;2)
[D3]=REDONDEAR(Hoja1!D4/1000000;2) [E3]=REDONDEAR(Hoja1!C5/1000000;2)
[F3]=REDONDEAR(Hoja1!D5/1000000;2) [G3]=REDONDEAR(Hoja1!C6/1000000;2)
[H3]=REDONDEAR(Hoja1!D6/1000000;2)

Fila "4"
[A4]=Hoja1!A7 [B4]=Hoja1!B7 [C4]=REDONDEAR(Hoja1!C7/1000000;2)
[D4]=REDONDEAR(Hoja1!D7/1000000;2) [E4]=REDONDEAR(Hoja1!C8/1000000;2)
[F4]=REDONDEAR(Hoja1!D8/1000000;2) [G4]=REDONDEAR(Hoja1!C9/1000000;2)
[H4]=REDONDEAR(Hoja1!D9/1000000;2)
.
.
.

y así...

Como puedes ver es una lata realizarlo todos los días.

un saludo
Patricio.


"Héctor Miguel" escribió:

> hola, Patricio !
>
> por los datos que expones, necesitas "combinar" cada 3 filas del *.csv en una sola de la nueva hoja
> omitiendo fecha y hora (as primeras dos columnas) de las filas 2 y 3 de cada grupo
>
> si quieres dejara para despues alguna macro, seria bueno si comentas el procedimiento que sigues actualmente
> no importa si lo has logrado con la base de archivos que no cambian de nombre (solo no omitas los detalles, o sea)...
> el procedimiento (manual ?) exacto de como, cuando, de donde, a donde, etc. (hojas, rangos, ...)
>
> saludos,
> hector.
>
> __ la consulta original __
> > los datos me aparecen asi:
> > (A1) 01-02-2008,15:23:57,102.055745,101.660760
> > (A2) 01-02-2008,15:23:57,99.010695,94.919786
> > (A3) 01-02-2008,15:23:57,89.432103,82.219484
> > y tengo que dejarlos asi:
> > A B C D E F G H
> > 1 fecha hora %hora %turno %campa#a
> > 2 01-02-2008 15:23:57 102,06 101,66 99,01 94,92 89,43 82,22
> >
> > Y esto se repite sucesivamente. las 3 filas A1:A3, tengo que dejarlas A2:H2 de la A4:A6 en A3:H3 todo esto en otro archivo.
> > (A1:H1, los reservo para los nombres de las columnas)
> > (yo pensaba hacer una plantilla, donde poniendo la direccion y nombre de archivo CSV (en alguna celda)
> > me copie los datos de este archivo a la pantilla, para luego guardarla con otro nombre
> > donde puedan acceder el personal involucardo con los estos datos
> > yo lo he echo copiando datos de un archivo con nombre conocido y que no cambia.
> > pero en este caso no se como relacionarlo con estos archivos que se crean diariamente y con nombre diferente.
> > si me pudieran ayudar por este lado, se los agradeceria aun mas, ya que yo no me manejo mucho con Visual Basic)
>
>
>
Respuesta Responder a este mensaje
#12 Héctor Miguel
09/02/2008 - 03:33 | Informe spam
hola, Patricio !

AnSanVal, (si probe tu ejemplo :-) ) ...

Hector, me resulto todo bien, en la "Hoja 2" aparecen todos los datos divididos
desde A2:Hn, incluyendo los nombres de las columnas.
A diferencia de la solucion de AnSalVal, yo tuve que separar los datos por coma en la "Hoja 1".

Vuelvo a agradecer su interes en ayudarme en este problema, creo que voy por buen camino...



(creo que) solo tienes que combinar las partes que te interese de cada propuesta ;)

saludos,
hector.
Respuesta Responder a este mensaje
#13 Patricio
10/02/2008 - 01:53 | Informe spam
Hola, Héctor y AnSanVal"

Conviné partes de ambas soluciones, y logre el objetivo, ahora solo me falta
perfeccionarlo un poco mas, para eso la siguiente consulta.

¿es posible, crear una plantilla donde tenga el codigo definitivo en una
"Hoja 2", y solo tenga que ingresar (en alguna celda de la "hoja 1", o algun
"UserForm1"), la direccion y nombre de archivo de origen p.e.
"E:\Gespro\Estadisticas\2008020.csv", para que se actualize los datos de
origen en la "hoja 1" automaticamente con solo ir ingresando su nombre de
archivo "*.csv" ?.

Si no se puede no importa, con lo que ya han echo me han ahorrado
cualesquier tiempo.

Un Saludo y muchas gracias.
Patricio.


"AnSanVal" escribió:

Hola patricio, estoy dando por hecho que el ejemplo que te ofrecí NO lo probaste. :-(

Saludos desde Tenerife.
"Patricio" escribió en el mensaje news:
Hola, Héctor.

lo primero que hago es copiar toda la columna "A" del Libro *.csv en la
columna "A" de la "Hoja 1" de un nuevo Libro *.xls. Luego hago la separación
por coma (Menú>Datos>Texto en columnas... Delimitados> Separador> Coma). En
la "Hoja 2" (de este nuevo libro) en la fila "1" desde la columna "A", hasta
la "H". lo dejo para los nombres de las columnas. Luego comienzo a copiar los
datos desde la "Hoja 1" a la "Hoja 2":

Fila "2"
[A2]=Hoja1!A1 [B2]=Hoja1!B1 [C2]=REDONDEAR(Hoja1!C1/1000000;2)
[D2]=REDONDEAR(Hoja1!D1/1000000;2) [E2]=REDONDEAR(Hoja1!C2/1000000;2)
[F2]=REDONDEAR(Hoja1!D2/1000000;2) [G2]=REDONDEAR(Hoja1!C3/1000000;2)
[H2]=REDONDEAR(Hoja1!D3/1000000;2)

esta seria la primera fila con datos. Esta fila la selecciono y la copio en
las demás filas, y de ahí tengo que comenzar a eliminar las filas que no me
sirven: dejo 1 y elimino 2, avanzo 1 y elimino 2 y así sucesivamente, para
dejarlo así:

Fila "3"
[A3]=Hoja1!A4 [B3]=Hoja1!B4 [C3]=REDONDEAR(Hoja1!C4/1000000;2)
[D3]=REDONDEAR(Hoja1!D4/1000000;2) [E3]=REDONDEAR(Hoja1!C5/1000000;2)
[F3]=REDONDEAR(Hoja1!D5/1000000;2) [G3]=REDONDEAR(Hoja1!C6/1000000;2)
[H3]=REDONDEAR(Hoja1!D6/1000000;2)

Fila "4"
[A4]=Hoja1!A7 [B4]=Hoja1!B7 [C4]=REDONDEAR(Hoja1!C7/1000000;2)
[D4]=REDONDEAR(Hoja1!D7/1000000;2) [E4]=REDONDEAR(Hoja1!C8/1000000;2)
[F4]=REDONDEAR(Hoja1!D8/1000000;2) [G4]=REDONDEAR(Hoja1!C9/1000000;2)
[H4]=REDONDEAR(Hoja1!D9/1000000;2)
.
.
.

y así...

Como puedes ver es una lata realizarlo todos los días.

un saludo
Patricio.


"Héctor Miguel" escribió:

> hola, Patricio !
>
> por los datos que expones, necesitas "combinar" cada 3 filas del *.csv en una sola de la nueva hoja
> omitiendo fecha y hora (as primeras dos columnas) de las filas 2 y 3 de cada grupo
>
> si quieres dejara para despues alguna macro, seria bueno si comentas el procedimiento que sigues actualmente
> no importa si lo has logrado con la base de archivos que no cambian de nombre (solo no omitas los detalles, o sea)...
> el procedimiento (manual ?) exacto de como, cuando, de donde, a donde, etc. (hojas, rangos, ...)
>
> saludos,
> hector.
>
> __ la consulta original __
> > los datos me aparecen asi:
> > (A1) 01-02-2008,15:23:57,102.055745,101.660760
> > (A2) 01-02-2008,15:23:57,99.010695,94.919786
> > (A3) 01-02-2008,15:23:57,89.432103,82.219484
> > y tengo que dejarlos asi:
> > A B C D E F G H
> > 1 fecha hora %hora %turno %campa#a
> > 2 01-02-2008 15:23:57 102,06 101,66 99,01 94,92 89,43 82,22
> >
> > Y esto se repite sucesivamente. las 3 filas A1:A3, tengo que dejarlas A2:H2 de la A4:A6 en A3:H3 todo esto en otro archivo.
> > (A1:H1, los reservo para los nombres de las columnas)
> > (yo pensaba hacer una plantilla, donde poniendo la direccion y nombre de archivo CSV (en alguna celda)
> > me copie los datos de este archivo a la pantilla, para luego guardarla con otro nombre
> > donde puedan acceder el personal involucardo con los estos datos
> > yo lo he echo copiando datos de un archivo con nombre conocido y que no cambia.
> > pero en este caso no se como relacionarlo con estos archivos que se crean diariamente y con nombre diferente.
> > si me pudieran ayudar por este lado, se los agradeceria aun mas, ya que yo no me manejo mucho con Visual Basic)
>
>
>
Respuesta Responder a este mensaje
#14 Héctor Miguel
10/02/2008 - 04:23 | Informe spam
hola, Patricio !

... solo me falta perfeccionarlo un poco mas, para eso la siguiente consulta.
es posible, crear una plantilla donde tenga el codigo definitivo en una "Hoja 2"
y solo tenga que ingresar (en alguna celda de la "hoja 1", o algun "UserForm1")
la direccion y nombre de archivo de origen p.e. "E:\Gespro\Estadisticas\2008020.csv"
para que se actualize los datos de origen en la "hoja 1" automaticamente con solo ir ingresando su nombre de archivo "*.csv" ?...



asumiendo que la pc donde se generan los *.CSV utiliza punto para separar decimales y coma como separador de listas/argumentos
y que en la pc donde se abren los *.CSV el punto separa miles (por lo de los millones) y las listas/argumentos usan punto_y_coma
OJO: modifique temporalmente mi configuracion regional con los supuestos anteriores de la pc donde se abren los *.CSV
lo que obtuve es que al abrir el *.CSV y separar el texto en columnas se asume la coma como separador de decimales (en xl-97)

el siguiente procedimiento solicita abrir el archivo *.CSV, lo trabaja en directo (SIN necesidad de otras hojas)
arregla los datos a como indicas necesitarlos, y lo (re)graba ahora como archivo de excel (corre alguna/s prueba/s y)...

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Sub Arregla_CSV()
Application.ScreenUpdating = False
Dim uFila As Long, Fila As Integer, Archivo As String
Archivo = Application.GetOpenFilename("Archivos CSV (*.csv),*.csv")
If Dir(CStr(Archivo)) = "" Then MsgBox "Operacion cancelada !!!": Exit Sub
Workbooks.OpenText FileName:=Archivo
Columns("a:a").TextToColumns Destination:=Range("a1")
uFila = Range("a65536").End(xlUp).Row
For Fila = 1 To uFila Step 3
Range("a" & (Fila + 2) / 3).Resize(, 8).Value = Array( _
Range("a" & Fila), Range("b" & Fila), Range("c" & Fila), Range("d" & Fila), _
Range("c" & Fila + 1), Range("d" & Fila + 1), Range("c" & Fila + 2), Range("d" & Fila + 2))
Next
Range(Range("a" & uFila / 3).Offset(1), Range("a" & uFila)).EntireRow.Delete
Range("a1").EntireRow.Insert
Range("a1").Resize(, 7).Value = Array("Fecha", "Hora", "% Hora", "", "% Turno", "", "% Campaña")
Range("c2:h" & Range("a65526").End(xlUp).Row).NumberFormat = "0.00"
ActiveWorkbook.SaveAs ActiveSheet.Name, xlWorkbookNormal
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida