Mostrando entradas con la etiqueta Exportar. Mostrar todas las entradas
Mostrando entradas con la etiqueta Exportar. 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-04-01

Exportar todas las tablas de Access

Title Si deseamos exportar todas las tablas de un fichero de Access a un fichero de Excel empleamos una de las siguientes subrutinas:

A un fichero XLS

Sub ExportarTablas()

Dim tbl As TableDef
For Each tbl In CurrentDb.TableDefs
    If Left(tbl.Name, 4) <> "msys" Then
      DoCmd.TransferSpreadsheet acExport, 8, tbl.Name, _
      CurrentProject.path & "\Tablas.xls", True, tbl.Name
    End If
Next

End Sub

A un fichero XLSX

Sub ExportarTablas()

Dim tbl As TableDef
For Each tbl In CurrentDb.TableDefs
    If Left(tbl.Name, 4) <> "msys" Then
      DoCmd.TransferSpreadsheet acExport, 10, tbl.Name, _
      CurrentProject.path & "\Tablas.xlsx", True, tbl.Name
    End If
Next

End Sub

Notas

Ambas subrutinas crearán o sobrescribirán, si ya existe, en la ruta del fichero Access un fichero llamado Tablas.xls o Tablas.xlsx que contendrá todas las tablas del mismo.

La principal diferencia observable entre ambas extensiones, XLS (Excel 2000 format) y XLSX (Excel 2010 format), será que el fichero XLSX al ser un fichero comprimido tendrá un tamaño menor. Además al exportar desde Access como XLS el tipo de letra por defecto será MS Sans Serif, mientras que como XLSX emplearé el tipo de letra por defecto de Excel (Calibri en este caso).

Con anterioridad vimos cómo exportar una tabla o consulta de Access como CSV. Para exportar como un fichero de Excel la sintaxis es prácticamente idéntica, salvo que en ahora emplearemos DoCmd.TransferSpreadsheet en lugar de DoCmd.TransferText. Hay numerosos códigos en la red muy similares. Empleamos un bucle por todas las tablas de Access, introducimos un condición —if...then— para que compruebe si el nombre de la tabla comienza por MSys (MSysObjects tables) pues al intentar exportar estas tablas del sistema, el código arrojaría el siguiente error.

Referencias

2014-06-23

Exportar un rango de Excel al bloc de notas mediante VBA

Title Un aspecto importante al trabajar en una aplicación es la salida de datos o exportación de los mismos. Por ejemplo, para exportar datos en un formato de texto compatible con otras aplicaciones o sistemas. En otra entrada quizá trataremos las diferentes alternativas. En esta ocasión exportamos un rango como un fichero de texto (delimitado por tabulaciones) y lo abrimos con el bloc de notas.

Opción 1

La primera alternativa destaca por su brevedad. Abre el bloc de notas y pega el rango de CurrentRegion (región actual). El fichero de texto lo tendremos que guardar antes de cerrar. El problema es que usar SendKeys en VBA puede causar problemas imprevistos. En este caso desactiva la tecla Bloq Num.

Sub Rango_a_Bloc_de_notas1()
    Range("A1").CurrentRegion.Copy 'Celda de la región actual
    Shell "notepad.exe", vbNormalFocus
    SendKeys "^V"
    Close
End Sub

Opción 2

En esta segunda opción prescindimos de SendKeys. Creamos un libro nuevo de Excel, pegamos el contenido de CurrentRegion del libro inicial, guardamos el nuevo libro como fichero de texto con el nombre prueba.txt y abrimos el nuevo fichero de texto con el bloc de notas.

Sub Rango_a_Bloc_de_notas2()
    Application.ScreenUpdating = False
    Range("A1").CurrentRegion.Copy 'Celda de la región actual
    Dim ruta As String, wb As Object
    ruta = ThisWorkbook.Path & "\prueba.txt"
        Set wb = Workbooks.Add
        wb.Worksheets(1).Paste
        wb.SaveAs Filename:=ruta, FileFormat:=xlText
        Application.DisplayAlerts = False
        wb.Close
        Application.DisplayAlerts = True
    Shell "notepad.exe " & ruta, vbNormalFocus
End Sub

2014-06-20

Exportar gráficos de un libro de Excel con VBA

Hace unas semanas cree la siguiente subrutina que exporta todos los gráficos de un libro de Excel en la misma ruta del fichero desde donde se ejecuta.

Código

Option Explicit
Sub ExportarGraficos()
    Dim i As Integer, ext As String
    Dim ws As Object, chtobj As ChartObject
    Dim chtobjnum As Integer
    ext = InputBox(Prompt:="Escribe la extensión incluyendo el punto." _
            & vbCrLf & "Ej: .png, .gif, .jpeg, etc.", _
            Title:="Extensión de la imagen", Default:=".png")
        For Each ws In ThisWorkbook.Worksheets
        chtobjnum = chtobjnum + ws.ChartObjects.Count
            For Each chtobj In ws.ChartObjects
              chtobj.Activate
              ActiveChart.Export Filename:=ThisWorkbook.Path & "\" _
              & ActiveChart.Name & ext
            Next chtobj
        Next ws
    MsgBox "Gráficos exportados: " & chtobjnum & vbCrLf & _
     "Ruta: " & ThisWorkbook.Path, vbInformation, "Gráficos"
End Sub

Aclaraciones

Al ejecutarla muestra un cuadro de diálogo para escoger la extensión de la imagen deseada. Por defecto es .png.

Al finalizar la subrutina muestra un mensaje de texto con el número de gráficos exportados y la ruta donde se guardaron.

Gráficos exportados

2014-04-01

Exportar tabla como archivo de texto sin truncar los decimales

Title
Si en Access tratamos de exportar una tabla a un archivo de texto, los campos numéricos exportados conservarán como máximo 2 decimales. Para evitar que se trunque el campo, creamos una consulta en la que especificaremos el número de decimales del campo.

Por ejemplo, para conservar 6 decimales del CampoNumerico:

1. Creamos una consulta con el campo:

Campo: Format([Tabla1]![CampoNumerico];"0,000000")
2. Guardamos la consulta.
3. Exportamos la consulta, la seleccionamos y:
  • Botón secundario del ratón > Exportar > Archivo de texto; o bien
  • En la ficha Datos externos, en el grupo Exportar, Archivo de texto:

Entradas relacionadas

Nube de datos