Aunque trato de evitarlo, ocasionalmente tengo que abrir un archivo CSV en Excel. Cuando lo hago, formatea columnas que contienen números, lo que las hace inútiles para mis propósitos. Por lo que puedo decir, la única forma de evitar que esto suceda en la importación es cambiar el nombre del archivo para que la extensión no sea .csv y usar el asistente de importación para especificar el formato de cada columna individualmente. Para archivos con 50-60 columnas, esto no es práctico.
Dado que cada respuesta a esta pregunta frecuente en Internet sugiere algunos medios para convertir los números formateados nuevamente una vez que el archivo está abierto (lo que no funcionará para mí, quiero resolver el problema general, no algunos casos específicos) o seleccionando manualmente el tipo de formato de cada columna (que no quiero hacer), estoy buscando una manera de establecer una preferencia o estilo global de modo que todas las columnas de todos los archivos CSV abiertos siempre tengan formato de texto. También sé "blindar" los números con comillas, pero los archivos que recibo no son así y esperaba evitar tener que procesar previamente los archivos para que Excel no los arruine.
¿Hay alguna manera de hacer esto específicamente : formatear siempre todas las columnas en archivos CSV abiertos como texto, sin seleccionar manualmente cada columna cada vez durante la importación?
Estoy usando Excel 2003, pero tomaré respuestas para 2007 si eso es lo que sabes.
fuente
Respuestas:
Esto funciona:
Uso:
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, puede, como yo, cansarse, cada vez, de desplazarse a la columna 60 para presionar Mayús y hacer clic.
EDITAR @GSerg dice 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 descriptiva:
Entonces, el código anterior "funciona", pero este ridículo comportamiento de Excel lo mata. De cualquier forma 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 libre.
fuente
Workbooks.OpenText
tiene sus defectos por diseño (ver mi respuesta a continuación). Usar en suQueryTables
lugar.Cómo abrir CSV en Excel
Buen camino
Excel → Datos → Obtener datos externos → Seleccione todas las columnas con Shifty elija Texto
Upside: trata todos los valores correctamente como texto sin ninguna excepción
Desventaja: más pasos que un simple doble clic
Mal camino
Abra un CSV con doble clic o Abrir con cuadro de diálogo de Excel
Desventaja: el controlador CSV interno de Excel malinterpreta los valores con un inicio
-
o un=
signo como fórmula en lugar de textoDesventaja: perderá ceros a la izquierda de valores binarios como
0001
debido al formato de columna autodetectado de ExcelBuena manera (para VBA)
Use QueryTables (la contraparte de VBA
Get external data
) → Código de ejemploUpside: trata todos los valores correctamente como texto sin ninguna excepción
Desventaja: un poco más de código que
OpenText
métodoMala manera (para VBA)
Workbooks.OpenText
Método de uso → 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 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.
Encierre cada valor con comillas dobles y coloque como prefijo un signo igual como
="00001"
o anteponga una pestaña a cada valor. Ambas formas obligarán a Excel a tratar el valor como textoContenido original de CSV
CSV en Excel cuando se abre haciendo doble clic
Tenga en cuenta que 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. Luego use Datos - Texto a columnasDesventaja: el texto en columnas para cambiar los formatos de columna de la parte general al texto produce resultados inconsistentes. Si un valor contiene un carácter
-
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 modificó en algún lugar entre Excel 2007 y 2013, por lo que ya no funciona)
Complemento de Excel para abrir CSV e importar todos los valores como texto
Este es un complemento de Excel para simplificar las acciones de importación CSV.
La principal ventaja: es una solución de un clic y utiliza
QueryTables
, el mismo método a prueba de balas detrás de Obtener datos externosInstalación
%appdata%\Microsoft\AddIns
File tab → Options → Add-Ins → Go To
y seleccioneImportCSV.xla
File tab → Options → Trust Center → Trust Center Settings → Macro Settings → Enable all macros
Notará una nueva entrada en la barra de menú llamada Complementos y utilizará 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 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 utiliza 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
C:\my\folder\myScript.ps1
. (Tenga en cuenta la extensión.ps1
)shell:sendto
» EnterAhora puede seleccionar (múltiples) CSV y abrirlos en Excel a través de
Right-click » SendTo » Excel
fuente
Puede intentar abrir primero un .xlsx, luego crear una conexión de datos e importar el .csv. Seleccione "coma" delimitada, 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 primer encabezado de columna que desea importar como texto, desplácese al encabezado de columna final y presione Mayús + clic en el encabezado. Luego seleccione la opción radial "Texto".
fuente
La sugerencia de Wetmelon funciona (incluso con .CSV) si hace lo siguiente:
Sé que son más pasos, pero al menos me permite abrir CSV de esta manera sin tener que cambiar la extensión
fuente
¡Cuidado!
Cuando utilice el método manual "Excel → Datos → Obtener datos externos → Seleccione todas las columnas y elija Texto" ......
Esto solo establecerá las columnas en el texto "que tienen datos en la primera fila" (generalmente una fila de encabezado). Este asistente no le muestra las columnas más a la derecha que podrían tener datos más abajo pero no en la primera fila. Por ejemplo:
Row1Col1, Row1Col2, Row1Col3
Row2Col1, Row2Col2, Row2Col3, Row2Col4
¡Nunca verá Col 4 en el asistente de importación, por lo que no tendrá la opción de cambiarlo de formato general a texto antes de importar !!!!
fuente
Aquí está el procedimiento alternativo al código publicado anteriormente por Jean-François Corbett
Este procedimiento importará el archivo csv a Excel con todas las columnas formateadas como texto
fuente
Si siempre está importando los mismos datos (formato de registro constante, diseño, etc.), podría escribir una macro de Access utilizando una especificación de importación y luego volcar los datos nuevamente a Excel. Hecho esto puede veces. La otra forma en que lo he hecho es usar VBA y leer los datos en la hoja de trabajo un registro a la vez y analizarlos a medida que se lee. Hasta donde yo sé, no hay forma de establecer un formato predeterminado durante la importación en Excel e incluso si pudiera causaría problemas con el siguiente tipo de archivo que intenta analizar.
fuente
Como solicitud, enviando mi comentario como respuesta (con un poco más de información agregada):
Hola, Scripting Guy hizo un artículo de blog sobre Importar CSV a Excel que podría tener algunos datos útiles para usted. Jugar con el objeto de datos dentro de powershell puede permitirle hacer lo que quiera.
Aunque el artículo solo menciona específicamente la importación de datos en las celdas que pueden dejar el formato de número, es posible jugar con algunas de las propiedades y métodos de Excel ComObject para forzar que los datos ingresen a las celdas como texto sin formato (o forzar el formato de las celdas en texto antes o después de la importación).
fuente
Por razones desconocidas, incluso si proporciona explícitamente formatos para todas las columnas, Excel lo ignorará si la extensión del archivo es CSV.
Algunas opciones:
Cree una consulta para importar los datos, como sugiere Wetmelon .
Desventaja: es posible que le falten controladores de base de datos CSV en una máquina de 64 bits.
Use el código de Jean , pero incorpore la copia del archivo a una carpeta temporal y cambie la extensión de la copia.
Desventaja: Sin enlace al archivo original (al guardar se sobrescribirá la copia); Tendrá que eliminar manualmente la copia después. Aún así, puede guardar manualmente como sobre el CSV original.
Abrir el CSV en el Bloc de notas, Ctrl+A, Ctrl+C, pegue a Excel, a continuación, los datos - texto en columnas, entonces es el asistente habitual donde se puede establecer todas las columnas de texto en una sola vez. Es una versión diferente de la opción anterior, porque también oculta la preciosa extensión de Excel.
Desventaja: manual.
Tenga un bucle VBA muy simple que lea todo el archivo en la memoria y lo coloque en la hoja, celda por celda.
Desventaja: más lento, feo.
fuente
Si entiendo la pregunta correctamente, esto se resuelve fácilmente usando la opción Transponer en Pegado especial como se describe aquí .
fuente