martes, 16 de marzo de 2010

Exportar un archivo CSV a Excel y Word

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 Excel
Para el ejemplo colocar
  • un CommonDialog1
  • un Command1.
Nota: Agregar la referencia a Microsoft Excel para poder usarlo desde visual basic

Código fuente en un formulario
  1. Private Sub Command1_Click()   
  2.   
  3. Dim CVS As String  
  4. Dim XLS As String  
  5.   
  6. With CommonDialog1   
  7.      'Para Abrir el CSV   
  8.      .Filter = "Archivo CSV|*.csv|Todos los archivos|*.*"  
  9.      .DialogTitle = " Seleccionar el archivo CSV"  
  10.      .ShowOpen   
  11.      CVS = .FileName   
  12.      'Para guardar el XLS   
  13.      .Filter = "Archivo Xls|*.xls"  
  14.      .FileName = ""  
  15.      .DialogTitle = " Escriba l nombre del archivo Xls "  
  16.         
  17.      .ShowSave   
  18.      XLS = .FileName   
  19. End With  
  20.   
  21. If CVS = "" Or XLS = "" Then  
  22.    Exit Sub  
  23. Else  
  24.    Call Exportar_CSV_XLS(CVS, XLS)   
  25. End If  
  26. End Sub  
  27.   
  28. Private Sub Exportar_CSV_XLS(path_Cvs As String, path_Xls As String)   
  29.   
  30. On Error GoTo ErrSub   
  31.   
  32. Dim obj_Excel As Object  
  33. Dim Fila As Integer, Columna As Integer  
  34. Dim Contenido As String, Lineas As Variant  
  35. Dim datos As Variant, MC As Integer  
  36.   
  37.   
  38.     'Lee el contenido del CSV y lo almacena en la variable   
  39.     Open path_Cvs For Input As #1   
  40.     Contenido = Input$(LOF(1), #1)   
  41.     Close   
  42.        
  43.     'Nuevo objeto Excel   
  44.     Set obj_Excel = CreateObject("Excel.Application")   
  45.        
  46.     With obj_Excel   
  47.     'Agrega un libro   
  48.     .Workbooks.Add   
  49.        
  50.     ' Obtiene el número de líneas del Csv con la función split   
  51.     Lineas = Split(Contenido, vbCrLf)   
  52.        
  53.     For Fila = 0 To UBound(Lineas)   
  54.            
  55.         'Separa los datos de la linea   
  56.         datos = Split(Lineas(Fila), ",")   
  57.            
  58.         'Recorre los datos de esta fila que corresponden a cada campo   
  59.         For Columna = 0 To UBound(datos)   
  60.             ' Agrega el dato a la celda de la hoja activa   
  61.             .ActiveSheet.Cells(Fila + 1, Columna + 1) = datos(Columna)   
  62.         Next  
  63.         If MC < Columna Then  
  64.            MC = Columna   
  65.         End If  
  66.     Next  
  67.        
  68.     'Selecciona toda la hoja   
  69.     .ActiveSheet.UsedRange.Select  
  70.     'Autoajusta las columnas   
  71.     .Selection.Columns.AutoFit   
  72.        
  73.        
  74.     'Selecciona el encabezado   
  75.     .ActiveSheet.Range(.ActiveSheet.Cells(1, 1), .ActiveSheet.Cells(1, MC)).Select  
  76.            
  77.     End With  
  78.            
  79.     ' Aplica atributos a la fuente a la selección anterior ( los encabezados )   
  80.     With obj_Excel.Selection.Font   
  81.         .Name = "Verdana"  
  82.         .FontStyle = "Bold"  
  83.         .Size = 14   
  84.         .Strikethrough = False  
  85.         .Superscript = False  
  86.         .Subscript = False  
  87.         .OutlineFont = False  
  88.         .Underline = xlUnderlineStyleNone   
  89.     End With  
  90.   
  91.     ' Guarda el documento Xls   
  92.     obj_Excel.ActiveWorkbook.SaveAs _   
  93.         FileName:=path_Xls, _   
  94.         FileFormat:=xlNormal, _   
  95.         password:="", _   
  96.         WriteResPassword:="", _   
  97.         ReadOnlyRecommended:=False, _   
  98.         CreateBackup:=False  
  99.   
  100.     obj_Excel.ActiveWorkbook.Close False  
  101.   
  102.     'Cierra el archivo y elimina la variable   
  103.     obj_Excel.Quit   
  104.     Set obj_Excel = Nothing  
  105.        
  106.     'Fin   
  107.     MsgBox "Archivo Xls guardado ", vbInformation   
  108.        
  109.     Exit Sub  
  110.        
  111. 'Error   
  112. ErrSub:   
  113.     MsgBox Err.Description   
  114.     On Error Resume Next  
  115.     If Not obj_Excel Is Nothing Then  
  116.        obj_Excel.Quit   
  117.       Set obj_Excel = Nothing  
  118.     End If  
  119. End Sub  
  120.   


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
  1. Option Explicit  
  2.   
  3.   
  4. ' --------------------------------------------------------------------------------   
  5. ' \\ -- Botón para convertir el archivo csv   
  6. ' --------------------------------------------------------------------------------   
  7. Private Sub Command1_Click()   
  8.    Call Convertir(App.Path & "\archivo.csv", App.Path & "\archivo_de_word.doc")   
  9. End Sub  
  10.   
  11.   
  12. Public Sub Convertir(sFileNameCSV As String, sFileNameDOC As String)   
  13.        
  14.     ' -- Variables   
  15.     Dim obj_word        As Object  
  16.     Dim obj_Document    As Object  
  17.        
  18.        
  19.     On Error Resume Next  
  20.     ' -- Crear nueva instancia para acceder a Word   
  21.     Set obj_word = GetObject(, "Word.Application")   
  22.     If obj_word Is Nothing Then Set obj_word = CreateObject("Word.Application")   
  23.        
  24.     On Error GoTo word_error   
  25.     If obj_word Is Nothing Then  
  26.         MsgBox "No se pudo acceder a Microsoft Word", vbExclamation   
  27.         Exit Sub  
  28.     End If  
  29.        
  30.     ' -- Opcional - Hacer visible la aplicación   
  31.     obj_word.Visible = True  
  32.        
  33.     ' -- Abrir el archivo CSV con el método Open   
  34.     Set obj_Document = obj_word.Documents.Open(sFileNameCSV)   
  35.        
  36.     ' -- Convertir el documento a una tabla   
  37.     ' -- Nota. el caracter de separación de los campos del archivo csv   
  38.     ' -- es el especificado en la configuración de windows en panel de control   
  39.     ' -- Configuración regional   
  40.     With obj_Document   
  41.         .Range.ConvertToTable Separator:=2, AutoFitBehavior:=0   
  42.     End With  
  43.        
  44.     ' -- Guardar documento de word en el directorio del programa   
  45.     Call obj_Document.SaveAs(sFileNameDOC)   
  46.        
  47. ' -- Eliminar referencias   
  48. CleeanUp:   
  49.     Set obj_Document = Nothing  
  50.     Set obj_word = Nothing  
  51.     Exit Sub  
  52. word_error:   
  53.     MsgBox Err.Description, vbCritical, "Error"  
  54.     Resume CleeanUp   
  55. End Sub  
  56.   
  57. Private Sub Form_Load()   
  58.     Command1.Caption = "Convertir"  
  59. End Sub  

No hay comentarios:

Publicar un comentario