Foros del Web » Soporte técnico » Ofimática »

cambiar delimitador de campos archivos csv

Estas en el tema de cambiar delimitador de campos archivos csv en el foro de Ofimática en Foros del Web. Hola buen día. Estoy realizando una macro en Excel la cual debe guardar las hojas de un archivo en formato .csv utilizo la siguiente instrucción: ...
  #1 (permalink)  
Antiguo 22/02/2011, 10:55
 
Fecha de Ingreso: octubre-2006
Ubicación: Xoxocotla, Morelos Mexico
Mensajes: 243
Antigüedad: 17 años, 6 meses
Puntos: 0
cambiar delimitador de campos archivos csv

Hola buen día.

Estoy realizando una macro en Excel la cual debe guardar las hojas de un archivo en formato .csv

utilizo la siguiente instrucción:

ActiveWorkbook.SaveAs Filename:=nam_file, FileFormat:=xlCSV

pero lo quiero separado por (pipe) | debido que ese formato se insertará a la base de datos y necesita ser con |.

Alguien me puede ayudar??
  #2 (permalink)  
Antiguo 22/02/2011, 12:35
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años
Puntos: 88
De acuerdo Cambiar delimitador de campos archivos csv

Hola! Hobitt.
Cuando guardas una tabla de datos con formato CSV (Comma Separated Values) obtienes un archivo de texto plano en el que la separación entre columnas se representa con comas.
Eventualmente y según la Configuración Regional de la PC, en lugar de "comas" podrías observar "punto y comas".

Por lo tanto tú no deseas obtener un archivo con formato CSV sino una variante de él, que utilice como separador al símbolo "|".

La forma más segura de obtenerlo (al menos: ésa es mi experiencia) es "armando" ese archivo en una columna auxiliar del propio archivo de datos y luego guardar esa columna como archivo de texto.

Fíjate en el siguiente ejemplo (supondré 3 columnas y 20 filas):

Código PHP:
Sub Macro522()
Dim myBook As String
With 
[d1:d20]
.
Value = [A1:A20 "|" B1:B20 "|" C1:C20]

Workbooks.Add xlWBATWorksheet
.Copy [a1]

myBook ThisWorkbook.Path "\Prueba.txt"
If Dir(myBook) <> "" Then Kill myBook
ActiveWorkbook
.SaveAs Filename:=myBookFileFormat:=xlUnicodeTextCreateBackup:=False
ActiveWorkbook
.Close False
    
.EntireColumn.Delete Shift:=xlToLeft
End With
End Sub 
¿Te sirve la idea?
Saludos, Cacho.

Última edición por mrocf; 22/02/2011 a las 12:46
  #3 (permalink)  
Antiguo 23/02/2011, 10:20
 
Fecha de Ingreso: octubre-2006
Ubicación: Xoxocotla, Morelos Mexico
Mensajes: 243
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: cambiar delimitador de campos archivos csv

Hola mrocf:

Gracias por la idea me ayudo de mucho y finalmente lo deje mas o menos asi. espero esto le sirva alguien más.

Sub save_file()
Dim ren As String ' variable para el ultimo renglon
Dim nam_file As String ' variable para el nombre del archivo
Dim path_file As String ' variable para la ruta en donde ser guardara
Dim fech_file As String ' variable para la fecha que se asiganra al nombre del archivo
Dim hoja_file As String ' variable para el nombre de la hoja
Dim n As Integer ' variable para cambiar el nombre del archivo
Dim urow As Integer ' variable para la ultima celda con a concatenar
Dim c As Integer ' contador para concatenar cada fila

hoja_file = ActiveSheet.Name 'nombre de la hoja
fech_file = Format(Now, "yymmdd") ' extrae el dia en que se insertaran los FN
path_file = ActiveWorkbook.Path ' la ruta del libro
nam_file = path_file + "\" + hoja_file + "_" + fech_file & ".csv" ' asigna el nombre que debara tener el archivo

Range("A1").Select ' se coloca en la primera celda
Selection.End(xlDown).Select ' se va a la ultima celda

ucel = ActiveCell.Address ' le da la direccion de la ultima celda
urow = Range(ucel).Row
If ucel = "$A$1048576" Then ' si la hoja esta vacia termina la macro sin guardar nada
Exit Sub
End If

For c = 1 To urow Step 1
Range("F" & c).Value = Range("A" & c).Value & "|" & Range("B" & c).Value & "|" & Range("C" & c).Value & "|" & Range("D" & c).Text & "|" & Range("E" & c).Text
Next

Range("F1:F" & urow).Copy

Workbooks.Add
Range("a1").PasteSpecial

Do Until Dir(nam_file) = ""
n = n + 1
nam_file = path_file + "\" + hoja_file + "_" + fech_file & "_" & n & ".csv"
Loop

ActiveWorkbook.SaveAs Filename:=nam_file, FileFormat:=xlCSVMSDOS, CreateBackup:=False
ActiveWorkbook.Close False

Columns("F:F").Select
Selection.Delete Shift:=xlToLeft

End Sub
  #4 (permalink)  
Antiguo 23/02/2011, 11:02
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años
Puntos: 88
Respuesta: cambiar delimitador de campos archivos csv

Antes de comentarte como adaptar la línea

.Value = [A1:A20 & "|" & B1:B20 & "|" & C1:C20]

para hacer que tu macro corra 10 veces más rápida, te pregunto: ¿Por qué de las columnas D y E tomas "Text", mientras que de las otras tomas "Value"?

Saludos, Cacho.

Etiquetas: campos, csv
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:06.