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 textoDesventaja: 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 ejemploAl 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 ejemploDesventaja: 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 deOpenText
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 OverflowCambiar 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 textoContenido CSV original
CSV en Excel cuando se abre mediante doble clic
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 columnasAbajo: 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
- Descargue el complemento y guárdelo en su carpeta de complementos:
%appdata%MicrosoftAddIns
- Abra Excel y active el complemento:
File tab → Options → Add-Ins → Go To
y seleccioneImportCSV.xla
- Habilite las macros de VBA:
File tab → Options → Trust Center → Trust Center Settings → Macro Settings → Enable all macros
- 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
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.
- 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()
- 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
- Abra su carpeta de envío a través de GanarR »
- 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.