Ejemplo que muestra como cargar un archivo CSV en una variable, recorrer los datos, y volcarlo a un nuevo libro de Excel
El ejemplo tiene una sub llamada Exportar_CSV_XLS, a la cual se le debe enviar como primer parámetro el path del archivo Csv, y en el segundo el path con el nombre para guardar el libro de ExcelPara el ejemplo colocar
- un CommonDialog1
- un Command1.
Código fuente en un formulario
- Private Sub Command1_Click()
- Dim CVS As String
- Dim XLS As String
- With CommonDialog1
- 'Para Abrir el CSV
- .Filter = "Archivo CSV|*.csv|Todos los archivos|*.*"
- .DialogTitle = " Seleccionar el archivo CSV"
- .ShowOpen
- CVS = .FileName
- 'Para guardar el XLS
- .Filter = "Archivo Xls|*.xls"
- .FileName = ""
- .DialogTitle = " Escriba l nombre del archivo Xls "
- .ShowSave
- XLS = .FileName
- End With
- If CVS = "" Or XLS = "" Then
- Exit Sub
- Else
- Call Exportar_CSV_XLS(CVS, XLS)
- End If
- End Sub
- Private Sub Exportar_CSV_XLS(path_Cvs As String, path_Xls As String)
- On Error GoTo ErrSub
- Dim obj_Excel As Object
- Dim Fila As Integer, Columna As Integer
- Dim Contenido As String, Lineas As Variant
- Dim datos As Variant, MC As Integer
- 'Lee el contenido del CSV y lo almacena en la variable
- Open path_Cvs For Input As #1
- Contenido = Input$(LOF(1), #1)
- Close
- 'Nuevo objeto Excel
- Set obj_Excel = CreateObject("Excel.Application")
- With obj_Excel
- 'Agrega un libro
- .Workbooks.Add
- ' Obtiene el número de líneas del Csv con la función split
- Lineas = Split(Contenido, vbCrLf)
- For Fila = 0 To UBound(Lineas)
- 'Separa los datos de la linea
- datos = Split(Lineas(Fila), ",")
- 'Recorre los datos de esta fila que corresponden a cada campo
- For Columna = 0 To UBound(datos)
- ' Agrega el dato a la celda de la hoja activa
- .ActiveSheet.Cells(Fila + 1, Columna + 1) = datos(Columna)
- Next
- If MC < Columna Then
- MC = Columna
- End If
- Next
- 'Selecciona toda la hoja
- .ActiveSheet.UsedRange.Select
- 'Autoajusta las columnas
- .Selection.Columns.AutoFit
- 'Selecciona el encabezado
- .ActiveSheet.Range(.ActiveSheet.Cells(1, 1), .ActiveSheet.Cells(1, MC)).Select
- End With
- ' Aplica atributos a la fuente a la selección anterior ( los encabezados )
- With obj_Excel.Selection.Font
- .Name = "Verdana"
- .FontStyle = "Bold"
- .Size = 14
- .Strikethrough = False
- .Superscript = False
- .Subscript = False
- .OutlineFont = False
- .Underline = xlUnderlineStyleNone
- End With
- ' Guarda el documento Xls
- obj_Excel.ActiveWorkbook.SaveAs _
- FileName:=path_Xls, _
- FileFormat:=xlNormal, _
- password:="", _
- WriteResPassword:="", _
- ReadOnlyRecommended:=False, _
- CreateBackup:=False
- obj_Excel.ActiveWorkbook.Close False
- 'Cierra el archivo y elimina la variable
- obj_Excel.Quit
- Set obj_Excel = Nothing
- 'Fin
- MsgBox "Archivo Xls guardado ", vbInformation
- Exit Sub
- 'Error
- ErrSub:
- MsgBox Err.Description
- On Error Resume Next
- If Not obj_Excel Is Nothing Then
- obj_Excel.Quit
- Set obj_Excel = Nothing
- End If
- End Sub
Convertir un csv a Word
Este ejemplo muestra como utilizar el método ConvertToTable de vba, para convertir y pasar los datos de un archivo csv a una tabla de un nuevo documento de Word.Para el ejemplo colocar en el formulario un botón, y establecer en la función Convertir, la ruta del fichero csv y la ruta del documento DOC que se crea en el App.Path del programa.
Código fuente
- Option Explicit
- ' --------------------------------------------------------------------------------
- ' \\ -- Botón para convertir el archivo csv
- ' --------------------------------------------------------------------------------
- Private Sub Command1_Click()
- Call Convertir(App.Path & "\archivo.csv", App.Path & "\archivo_de_word.doc")
- End Sub
- Public Sub Convertir(sFileNameCSV As String, sFileNameDOC As String)
- ' -- Variables
- Dim obj_word As Object
- Dim obj_Document As Object
- On Error Resume Next
- ' -- Crear nueva instancia para acceder a Word
- Set obj_word = GetObject(, "Word.Application")
- If obj_word Is Nothing Then Set obj_word = CreateObject("Word.Application")
- On Error GoTo word_error
- If obj_word Is Nothing Then
- MsgBox "No se pudo acceder a Microsoft Word", vbExclamation
- Exit Sub
- End If
- ' -- Opcional - Hacer visible la aplicación
- obj_word.Visible = True
- ' -- Abrir el archivo CSV con el método Open
- Set obj_Document = obj_word.Documents.Open(sFileNameCSV)
- ' -- Convertir el documento a una tabla
- ' -- Nota. el caracter de separación de los campos del archivo csv
- ' -- es el especificado en la configuración de windows en panel de control
- ' -- Configuración regional
- With obj_Document
- .Range.ConvertToTable Separator:=2, AutoFitBehavior:=0
- End With
- ' -- Guardar documento de word en el directorio del programa
- Call obj_Document.SaveAs(sFileNameDOC)
- ' -- Eliminar referencias
- CleeanUp:
- Set obj_Document = Nothing
- Set obj_word = Nothing
- Exit Sub
- word_error:
- MsgBox Err.Description, vbCritical, "Error"
- Resume CleeanUp
- End Sub
- Private Sub Form_Load()
- Command1.Caption = "Convertir"
- End Sub
No hay comentarios:
Publicar un comentario