Mostrando entradas con la etiqueta csv. Mostrar todas las entradas
Mostrando entradas con la etiqueta csv. Mostrar todas las entradas

2018-03-04

Cómo exportar en Excel un fichero csv con dobles comillas como calificador de texto


Problema

Queremos exportar un fichero de Excel como un fichero csv (delimitado por comas), y usar las dobles comillas como calificador de texto: "Texto1", "Texto2", "Texto3".

Solución

Excel no nos permite resolver el problema a través de los menús. Tenemos que recurrir a VBA con una subrutina encontrada en la página de soporte de Microsoft.

  1. Abrimos el Editor de Microsoft Visual Basic: Alt+F11.
  2. Creamos la siguiente subrutina en un módulo.
  3. Sub QuoteCommaExport()
       ' Definición de variables.
       Dim DestFile As String
       Dim FileNum As Integer
       Dim ColumnCount As Integer
       Dim RowCount As Integer
    
       ' Cuadro de diálogo para obtener la ruta de destino.
       DestFile = InputBox("Introduce la ruta completa del fichero" _
          & Chr(10) & "(Ej: C:\Usuarios\nubededatos\fichero.csv):", "Exportador con comillas")
    
       ' Obtiene el siguiente número de archivo disponible.
       FileNum = FreeFile()
    
       ' Desactiva la comprobación de errores.
       On Error Resume Next
    
       ' Intenta abrir la ruta de destino seleccionada.
       Open DestFile For Output As #FileNum
    
       ' Si se produce un error, muestra este mensaje.
       If Err <> 0 Then
          MsgBox "No se puede abrir el fichero " & DestFile
          End
       End If
    
       ' Activamos comprobación de errores.
       On Error GoTo 0
    
       ' Bucle en cada filade la selección.
       For RowCount = 1 To Selection.Rows.Count
    
          ' Bucle en cada columna de la selección.
          For ColumnCount = 1 To Selection.Columns.Count
    
             ' Escribe el texto entrecomillado de la celda actual en el fichero.
             Print #FileNum, """" & Selection.Cells(RowCount, _
                ColumnCount).Text & """";
    
             ' Comprueba si es la última columna.
             If ColumnCount = Selection.Columns.Count Then
                ' Si es así, escribe una línea en blanco.
                Print #FileNum,
             Else
                ' De lo contrario, escribe una coma.
                Print #FileNum, ",";
             End If
          ' Comienza la siguiente iteración del bucle de ColumnCount.
          Next ColumnCount
       ' Comienza la siguiente iteración del bucle de RowCount.
       Next RowCount
    
       ' Cierra el fichero de destino.
       Close #FileNum
    End Sub
    
  4. Seleccionamos el rango que deseamos exportar.
  5. Ejecutamos la subrutina.
  6. En el cuadro de diálogo indicamos la ruta completa donde exportar el fichero.
  7. El nuevo fichero se habrá exportado en la ruta indicada en el cuadro de diálogo.Comprobamos que tiene el calificador de texto con las comillas dobles abriendo el fichero con un editor de texto.

Entradas relacionadas

Referencias

2015-03-18

Convertir fichero Excel a CSV desde Access

Title Recientemente necesité convertir un fichero xlsb en csv separado por punto y coma antes de importarlo en Access. El código es el siguiente:

Sub Excel2csv()
       
    Dim FolderPath As String
    Dim filename As String
    Dim WB As Workbook
   
    FolderPath = Application.CurrentProject.Path & "\"
    filename = "Fichero.xlsb" ' Fichero origen

    Set xlApp = CreateObject("Excel.Application")
    With xlApp
        .DisplayAlerts = False
        .Application.Visible = False
        .Workbooks.Open (FolderPath & filename)
        .ActiveWorkbook.Saveas filename:=Application.CurrentProject.Path & "\" _
        & "Fichero.csv", FileFormat:=xlCSV, Local:=True ' Fichero destino
        .Workbooks.Close
        .DisplayAlerts = True
    End With
    Set xlApp = Nothing

End Sub

Notas

  • Es necesario añadir previamente la librería: Microsoft Access 15.0 Object Library
  • Podemos usar el mismo para guardar ficheros *.xls, *.xlsx, o *.xlsm como *.csv, tan sólo cambiamos la extensión del fichero origen.
  • Al haber deshabilitado las advertencias, el código reescribirá el fichero csv al ejecutar el código.
  • En el caso de querer guardar el csv separado por comas eliminamos del código anterior el argumento:

    Local:=True

Referencias

2013-06-12

Reemplazar carácter en un fichero de texto con VBA en Access

Title En alguna ocasión me he encontrado con el problema de descargar un fichero de texto delimitado por comas cuando necesitaba que el delimitador fuera el punto y coma (mal funcionamiento del programa de inteligencia de negocio).

Quizá la mejor opción sería cambiar el delimitador de nuestras especificaciones de importación en Access. Visita este artículo para ver como acceder a las especificaciones guardadas, y modifica el Delimitador de campo.


También tenemos otras alternativas:

1. Usar el Excel, Bloc de notas, u otro editor de texto como Notepad++, para reemplazar un carácter por otro. Cuando el número de ocurrencias es muy grande, millones en el caso de fichero de tamaño considerable, el proceso puede ser algo lento.

2. Utilizar código de VBA acelerando el proceso notablemente, evitando tener que abrir otros programas, reduciendo la probabilidad de errores y pudiendo llamarlo desde una macro u otro módulo.

Hay que copiar el siguiente código en un módulo de Ms Access:
Public Sub ReemplazarCaracteresAccess()

Dim folderPath As String
folderPath = Application.CurrentProject.Path & "\" 'Ruta del Access

Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(folderPath & "Inicial.csv") Then
    Set objStream = fso.OpenTextFile(folderPath & "Inicial.csv", 1, False, 0)
End If
    Set objCopy = fso.CreateTextFile(folderPath & "Final.csv")

For x = 1 To 5  'Se salta el nº de líneas indicadas 
    objStream.readline
Next x
 
Do While Not objStream.AtEndOfStream
    strOldLine = objStream.readline
    i = 1
    NewArray = Split(strOldLine, ",")'Carácter reemplazado: ,
       strNewLine = NewArray(0)
       
    Do Until i = UBound(NewArray) + 1
         strNewLine = strNewLine & ";" & NewArray(i)'Carácter nuevo: ;
         i = i + 1
    Loop
    objCopy.WriteLine strNewLine
Loop

End Sub
Notas: El fichero Inicial.csv debe de estar en la misma ruta del Access. El código creará un fichero Final.csv en dicha ruta con el carácter reemplazado. Borrar estas 3 líneas en el caso de que en el fichero de texto no haya que saltarse líneas en blanco y que provocarían un error:
For x = 1 To 5  'Se salta el nº de líneas indicadas 
    objStream.readline
Next x
También se puede usar este código para ficheros *txt. Ejemplo: Inicial.txt y Final.txt

Entradas relacionadas:

Nube de datos