Saltar al contenido

¿Cómo puedo configurar Excel para que siempre importe todas las columnas de archivos CSV como texto?

Nuestros investigadores estrellas han agotado sus depósitos de café, en su búsqueda todo el tiempo por la solución, hasta que Miranda halló el resultado en Bitbucket por lo tanto ahora la compartimos contigo.

Solución:

Cómo abrir archivos CSV en Excel

Buen camino

  • Excel → Datos → Obtener datos externos → Seleccione todas las columnas con Cambio y elige Texto

    Al revés: trata todos los valores correctamente como texto sin ninguna excepción

    Desventaja: más pasos que un simple Haga doble clic

Mal camino

  • Abra un CSV con Haga doble clic o de Excel Abrir con diálogo

    Desventaja: el controlador CSV interno de Excel malinterpreta los valores con un - o = firmar como una fórmula en lugar de texto

    Desventaja: perderá ceros a la izquierda de valores binarios como 0001 debido al formato de columna de detección automática de Excel

Buen camino (para VBA)

  • Use QueryTables (la contraparte de VBA para Get external data) → Código de ejemplo

    Al revés: trata todos los valores correctamente como texto sin ninguna excepción

    Desventaja: un poco más de código que OpenText método

Mal camino (para VBA)

  • Usar Workbooks.OpenText método → Código de ejemplo

    Desventaja: este método todavía utiliza el controlador de importación CSV interno de Excel con todos sus defectos

    Desventaja: Además, el fieldinfo parámetro de OpenText se ignora si la extensión es CSV. Normalmente, este parámetro le permite elegir cada formato de columna, pero no si la extensión es CSV. Puede leer más sobre este comportamiento en Stack Overflow

    Cambiar temporalmente el nombre de la extensión de origen de CSV a TXT y luego volver a CSV es una solución alternativa válida si tiene control total sobre el archivo de origen

Métodos adicionales

  • Si tiene acceso a la fuente que crea su CSV, puede modificar la sintaxis de CSV.
    Incluya todos los valores entre comillas dobles y prefix un signo igual como ="00001" o anteponer una pestaña a cada valor. Ambas formas obligarán a Excel a tratar el valor como texto

    Contenido CSV original
    ingrese la descripción de la imagen aquí

    CSV en Excel cuando se abre mediante doble clic
    ingrese la descripción de la imagen aquí

    Observe cómo Excel no cambia la línea 2 (método de comillas dobles) y la línea 3 (método de tabulación)

  • Abra CSV en el Bloc de notas y copie y pegue todos los valores en Excel. Entonces usa Datos: texto en columnas

    Abajo: Texto en columnas para cambiar los formatos de columna de general a texto produce resultados inconsistentes. Si un valor contiene un - rodeado de caracteres (por ejemplo, “= E1-S1”), Excel intenta dividir ese valor en más de una columna. Los valores ubicados directamente en esa celda pueden sobrescribirse
    (El comportamiento de Texto a columnas se cambió en algún lugar entre Excel 2007 y 2013, por lo que ya no funciona)


Complemento de Excel para abrir archivos CSV e importar todos los valores como texto

Este es un complemento de Excel para simplificar las acciones de importación de CSV.
La principal ventaja: es una solución con un solo clic y utiliza QueryTables, el mismo método a prueba de balas detrás Obtener datos externos

  • Agrega un nuevo comando de menú a Excel que le permite importar archivos CSV y TXT. Todos los valores se importan a la hoja activa comenzando en la celda seleccionada actualmente
  • Los complementos de Excel están disponibles para todas las versiones de Office en Windows y Mac
  • Todo el complemento tiene solo 35 líneas de código. Consulte el código fuente comentado si tiene curiosidad
  • El separador de lista CSV usado (coma o punto y coma) se toma de la configuración local de Excel
  • La codificación está configurada en UTF-8

Instalación

  1. Descargue el complemento y guárdelo en su carpeta de complementos: %appdata%MicrosoftAddIns
  2. Abra Excel y active el complemento: File tab → Options → Add-Ins → Go To y seleccione ImportCSV.xla
  3. Habilite las macros de VBA: File tab → Options → Trust Center → Trust Center Settings → Macro Settings → Enable all macros
  4. Reiniciar Excel

Notará una nueva entrada en la barra de menú llamada Complementos y usa este botón para abrir rápidamente sus archivos CSV sin pasar por la molestia del cuadro de diálogo Importar

ingrese la descripción de la imagen aquí


Script de PowerShell para abrir archivos CSV directamente desde el Explorador de Windows

Puede usar un script de PowerShell para abrir archivos CSV y pasarlos automáticamente a Excel. El script usa silenciosamente el método de importación de texto de Excel que trata los valores siempre como texto y, como beneficio adicional, maneja la codificación UTF-8.

  1. Cree un nuevo archivo de texto y pegue el siguiente script. Puede encontrar una versión comentada aquí.
$CSVs = @()
$args.ForEach(.txt$")) 
        $CSVs += ,$_
     
)

if (-Not $null -eq $CSVs) 

    $excel = New-Object -ComObject excel.application 
    $excel.visible = $true
    $excel.SheetsInNewWorkbook = $CSVs.Count    
    $workbook = $excel.Workbooks.Add()

    for ($i=0; $i -lt $CSVs.Count; $i++)

        $csv = Get-Item $CSVs[$i]
        $worksheet = $workbook.worksheets.Item($i + 1)
        $worksheet.Name = $csv.basename

        $TxtConnector = ("TEXT;" + $csv.fullname)
        $Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
        $query = $worksheet.QueryTables.item($Connector.name)
        $query.TextFilePlatform = 65001
        $query.TextFileTextQualifier = 1
        $query.TextFileOtherDelimiter = $Excel.Application.International(5) 
        $query.TextFileParseType  = 1
        $arrFormats = ,2 * $worksheet.Cells.Columns.Count
        $query.TextFileColumnDataTypes = $arrFormats
        $query.AdjustColumnWidth = 1
        $query.Refresh()
        $query.Delete()
    

  1. Guárdalo en algún lugar como C:myfoldermyScript.ps1. (Tenga en cuenta la extensión .ps1)
    • Abra su carpeta de envío a través de GanarR » shell:sendto » Ingresar
  2. Cree un nuevo acceso directo haciendo clic con el botón derecho en »Nuevo» Acceso directo y pegue esta línea. No olvide cambiar la ruta por la suya propia donde ha puesto su guión. Nombra el atajo, por ejemplo, Sobresalir

“% SystemRoot% system32 WindowsPowerShell v1.0 powershell.exe” -NoProfile -NonInteractive -WindowStyle Hidden -File “C: mi carpeta myScript.ps1”

Ahora puede seleccionar (múltiples) CSV y abrirlos en Excel a través de Right-click » SendTo » Excel

Esto funciona:

Sub OpenCsvAsText(ByVal strFilepath As String)

    Dim intFileNo As Integer
    Dim iCol As Long
    Dim nCol As Long
    Dim strLine As String
    Dim varColumnFormat As Variant
    Dim varTemp As Variant

    '// Read first line of file to figure out how many columns there are
    intFileNo = FreeFile()
    Open strFilepath For Input As #intFileNo
    Line Input #intFileNo, strLine
    Close #intFileNo
    varTemp = Split(strLine, ",")
    nCol = UBound(varTemp) + 1

    '// Prepare description of column format
    ReDim varColumnFormat(0 To nCol - 1)
    For iCol = 1 To nCol
        varColumnFormat(iCol - 1) = Array(iCol, xlTextFormat)
        ' What's this? See VBA help for OpenText method (FieldInfo argument).
    Next iCol

    '// Open the file using the specified column formats
    Workbooks.OpenText _
            Filename:=strFilepath, _
            DataType:=xlDelimited, _
            ConsecutiveDelimiter:=False, Comma:=True, _
            FieldInfo:=varColumnFormat

End Sub

Uso:

OpenCsvAsText "C:MyDirMyFile.txt"

El archivo separado por comas ahora está abierto como hoja de Excel con todas las columnas formateadas como texto.

Tenga en cuenta que la solución del asistente de @ Wetmelon funciona bien, pero si está abriendo muchos archivos, es posible que, como yo, se canse cada vez de desplazarse a la columna 60 para hacer clic con la tecla Mayúsculas y hacer clic en ella.

EDITAR @GSerg afirma en el comentario a continuación que esto “no funciona” y “come espacios y ceros a la izquierda”. Solo citaré el comentario a la pregunta, que es más descriptivo:

Por razones desconocidas, incluso si proporciona explícitamente formatos para todas las columnas en VBA, Excel lo ignorará si la extensión del archivo es CSV. Tan pronto como cambie la extensión, ese mismo código producirá los resultados correctos.

De modo que el código anterior “funciona”, pero este ridículo comportamiento de Excel lo mata. Independientemente de la forma en que lo corte, tendrá que cambiar la extensión a otra que no sea “.csv”, ¡lo siento! Después de eso, estás en casa gratis.

Puede intentar abrir un .xlsx primero, luego crear una conexión de datos e importar el .csv. Seleccione delimitado por “comas”, luego seleccione la opción para tratar todas las columnas como texto en lugar de “General”.

Editar: Oh, no leí completamente la pregunta. En el asistente de importación, seleccione el encabezado de la primera columna que desea importar como texto, desplácese hasta el encabezado de la columna final y presione Mayús + clic en el encabezado. Luego seleccione la opción radial “Texto”.

Te mostramos reseñas y valoraciones

Si crees que ha resultado provechoso nuestro post, sería de mucha ayuda si lo compartieras con más seniors así nos ayudas a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *