Estoy trabajando en una función para exportar resultados de búsqueda a un archivo CSV que se abrirá en Excel. Uno de los campos es un campo de texto libre, que puede contener saltos de línea, comas, citas, etc. Para contrarrestar esto, he envuelto el campo entre comillas dobles (").
Sin embargo, cuando importo los datos a Excel 2007, establezco el delimitador apropiado y establezco el calificador de texto entre comillas dobles, los saltos de línea siguen creando nuevos registros en los saltos de línea, donde esperaría ver todo el campo de texto en un unicelular.
También intenté reemplazar CR / LF (\ r \ n) con solo CR (\ r), y nuevamente con solo LF (\ n), pero no tuve suerte.
¿Alguien más ha encontrado este comportamiento, y si es así, cómo lo solucionó?
TIA,
-J
EDITAR:
Aquí hay un archivo rápido que escribí a mano para duplicar el problema.
ID, Nombre, Descripción
"12345", "Smith, Joe", "Hola.
Mi nombre es Joe".
Cuando importo esto a Excel 2007, termino con una fila de encabezado y dos registros. Tenga en cuenta que la coma en "Smith, Joe" se está manejando correctamente. Son solo los saltos de línea los que causan problemas.
fuente
Respuestas:
Excel (al menos en Office 2007 en XP) puede comportarse de manera diferente dependiendo de si se importa un archivo CSV al abrirlo desde el menú Archivo-> Abrir o al hacer doble clic en el archivo en el Explorador.
Tengo un archivo CSV que está en codificación UTF-8 y contiene nuevas líneas en algunas celdas. Si abro este archivo desde el menú Archivo-> Abrir de Excel, aparece el asistente "importar CSV" y el archivo no se puede importar correctamente: las líneas nuevas comienzan una nueva fila incluso cuando se citan. Si abro este archivo haciendo doble clic en él en una ventana del Explorador, se abre correctamente sin la intervención del asistente.
fuente
Ninguna de las soluciones sugeridas funcionó para mí.
Lo que realmente funciona (con cualquier codificación):
Copie / pegue datos del archivo csv (abierto en el Editor), luego realice "texto en columnas" -> no funciona, de acuerdo.
Vaya a la siguiente pestaña y copie / pegue nuevamente (lo mismo que ya tiene en su portapapeles) -> funciona automáticamente ahora.
fuente
Si está haciendo esto manualmente, descargue LibreOffice y use LibreOffice Calc para importar su CSV. Hace un trabajo mucho mejor en este tipo de cosas que cualquier versión de Excel que he probado, y puede guardar en XLS o XLSX según sea necesario si necesita transferir a Excel después.
Pero si está atascado con Excel y necesita una solución mejor, parece que hay una manera. Parece ser dependiente de la localidad (lo cual parece idiota, en mi humilde opinión). No tengo Excel 2007, pero tengo Excel 2010, y el ejemplo dado:
no funciona Lo escribí en el Bloc de notas y elegí Guardar como ..., y al lado del botón Guardar puedes elegir la codificación. Elegí UTF-8 como se sugiere, pero sin suerte. Sin embargo, cambiar las comas a punto y coma funcionó para mí. No cambié nada más, y simplemente funcionó. Así que cambié el ejemplo para que se vea así, y elegí la codificación UTF-8 al guardar en el Bloc de notas:
Pero hay una trampa! La única forma en que funciona es si hace doble clic en el archivo CSV para abrirlo en Excel. Si trato de importar datos del texto y elijo este CSV, entonces todavía falla en las nuevas líneas citadas.
¡Pero hay otra trampa! El separador de campo de trabajo (coma en el ejemplo original, punto y coma en mi caso) parece depender de la Configuración regional del sistema (establecida en Panel de control -> Región e idioma). En Noruega, la coma es el separador decimal. Excel parece evitar este carácter y prefiere un punto y coma en su lugar. Tengo acceso a otra computadora configurada en la configuración regional de inglés del Reino Unido, y en esa computadora, el primer ejemplo con un separador de coma funciona bien (solo en doble clic), ¡y el que tiene punto y coma en realidad falla! Demasiado para la interoperabilidad. Si desea publicar este CSV en línea y los usuarios pueden tener Excel, supongo que debe publicar ambas versiones y sugerir que las personas verifiquen qué archivo proporciona el número correcto de filas.
Todos los detalles que he podido reunir para que esto funcione son:
Espero que esto ayude a alguien.
fuente
=FOO(1;2)
lugar de=FOO(1,2)
), pero claramente es incorrecto que Excel lo aplique a un analizador de formato de archivo (¿qué otro programa analiza un formato de archivo estándar dependiente de la configuración regional? )¡Finalmente encontré el problema!
Resulta que estábamos escribiendo el archivo usando codificación Unicode, en lugar de ASCII o UTF-8. Cambiar la codificación en FileStream parece resolver el problema.
Gracias a todos por todas sus sugerencias!
fuente
Respuesta corta
Elimine los caracteres de nueva línea / salto de línea (
\n
con Notepad ++). Excel seguirá reconociendo el carácter de retorno de carro (\r
) para separar los registros.Respuesta larga
Como se mencionó, los caracteres de nueva línea son compatibles con los campos CSV, pero Excel no siempre los maneja con gracia. Me enfrenté a un problema similar con un CSV de terceros que posiblemente tenía problemas de codificación pero no mejoró con los cambios de codificación.
Lo que funcionó para mí fue eliminar todos los caracteres de nueva línea (
\n
). Esto tiene el efecto de contraer campos en un solo registro, suponiendo que sus registros estén separados por la combinación de un retorno de carro y una nueva línea (CR / LF). Excel importará correctamente el archivo y reconocerá nuevos registros por el retorno de carro.Obviamente, una solución más limpia es reemplazar primero las nuevas líneas reales (
\r\n
) con una combinación temporal de caracteres, reemplazando las nuevas líneas (\n
) con su carácter separado de elección (por ejemplo, coma en un archivo de punto y coma) y luego reemplazando los caracteres temporales con las nuevas líneas adecuadas nuevamente.fuente
\n
entre líneas y\r\n
valores internos. Acabo de quitar el último en Notepad ++.+1 en el comentario de J Ashley. Me encontré con este problema también. Resulta que Excel requiere:
Un carácter de nueva línea ("\ n") en la cadena entre comillas
Un retorno de carro y una nueva línea entre cada fila.
Por ejemplo, "Prueba", "Elemento multilínea \ n elemento multilínea" \ r \ n "Prueba2", "Elemento multilínea \ n elemento multilínea" \ r \ n
Usé notepad ++ para delimitar cada fila correctamente y solo para usar nuevas líneas en la cadena. Descubrí esto creando entradas de varias líneas en un documento de Excel en blanco y abriendo el csv en notepad ++.
fuente
Si el campo contiene un espacio inicial, Excel ignora la comilla doble como calificador de texto. La solución es eliminar los espacios iniciales entre la coma (separador de campo) y las comillas dobles. Por ejemplo:
Roto:
Nombre, Título, Descripción
"John", "Sr.", "Mi descripción detallada"
Trabajo:
Nombre, Título, Descripción
"John", "Sr.", "Mi descripción detallada"
fuente
Use las Hojas de cálculo de Google e importe el archivo CSV.
Luego puede exportar eso para usar en Excel
fuente
Si alguien tropieza con este hilo y está buscando una respuesta definitiva aquí va (crédito a la persona que menciona LibreOffice:
1) Instalar LibreOffice 2) Abrir Calc e importar archivo 3) Mi archivo txt tenía los campos separados por, y los campos de caracteres encerrados en "4) guardar como archivo ODS 5) Abrir archivo ODS en Excel 6) Guardar como .xls (x) 7) Hecho. 8) ¡Esto funcionó perfectamente para mí y me salvó EN GRANDE!
fuente
Pegue en Notepad ++, seleccione Codificación> Codificar en ANSI, copie todo de nuevo y pegue en Excel :)
fuente
Tuve un problema similar. Tenía algunos datos de Twitter en MySQL. Los datos tenían salto de línea (LF o \ n) con los datos. Tenía el requisito de exportar los datos de MySQL a Excel. El LF estaba estropeando mi importación de archivo csv. Entonces hice lo siguiente:
NOTA: al reemplazar CRLF o LF, no olvide marcar Check Excended (\ n, \ r, \ t ... Casilla de verificación [mire la parte inferior izquierda del cuadro de diálogo)
fuente
Mi experiencia con Excel 2010 en WinXP con configuración regional francesa
fuente
Excel está increíblemente roto cuando se trata de CSV. LibreOffice hace un trabajo mucho mejor. Entonces, descubrí que:
fuente
Visión general
Casi 10 años después de la publicación original, Excel no ha mejorado en la importación de archivos CSV. Sin embargo, descubrí que es mucho mejor al importar tablas HTML. Entonces, uno puede usar Python para convertir CSV a HTML y luego importar el HTML resultante a Excel.
Las ventajas de este enfoque son: (a) funciona de manera confiable, (b) no necesita enviar sus datos a un servicio de terceros (por ejemplo, hojas de Google), (c) no requiere instalaciones "gordas" adicionales (LibreOffice, Números, etc.) para la mayoría de los usuarios, (d) nivel más alto que entrometerse con caracteres CR / LF y marcadores de lista de materiales, (e) no es necesario jugar con la configuración regional.
Pasos
Los siguientes pasos se pueden ejecutar en cualquier shell similar a bash siempre que Python 3 esté instalado. Aunque Python se puede usar para leer directamente CSV, csvkit se usa para hacer una conversión intermedia a JSON. Esto nos permite evitar tener que lidiar con las complejidades de CSV en nuestro código Python.
Primero, guarde el siguiente script como
json2html.py
. El script lee un archivo JSON de stdin y lo descarga como una tabla HTML:Luego, instale csvkit en un entorno virtual y use
csvjson
para alimentar el archivo de entrada a nuestro script. Es una buena idea deshabilitar la conjetura del tipo de celda con el-I
argumento:Ahora
output.html
se puede importar en Excel. Los saltos de línea en las celdas se habrán conservado.Opcionalmente, es posible que desee limpiar su entorno virtual de Python:
fuente
Esto es para Excel 2016:
Solo tuve el mismo problema con los saltos de línea dentro de un archivo csv con el Asistente de Excel.
Después lo estaba intentando con la función "Nueva consulta": Datos -> Nueva consulta -> Desde archivo -> Desde CSV -> Elija el archivo -> Importar -> Cargar
Estaba funcionando perfectamente y una solución muy rápida para todos los que tienen el mismo problema.
fuente
Lo que funcionó para mí, importar a Excel directamente siempre que la importación se realice como formato de texto en lugar de formato csv. METRO/
fuente
simplemente cree una nueva hoja con celdas con salto de línea, guárdela en csv y luego ábrala con un editor que pueda mostrar los caracteres de fin de línea (como notepad ++). Al hacerlo, notará que un salto de línea en una celda está codificado con LF, mientras que un final de línea "real" es el código con CR LF. Voilà, ahora sabes cómo generar un archivo csv "correcto" para Excel.
fuente
También tuve este problema: es decir, archivos csv (delimitados por comas, cadenas delimitadas por comillas dobles) con LF en las cadenas entre comillas. Estos fueron descargados archivos cuadrados. Hice una importación de datos, pero en lugar de importar como archivos de texto, importé como "desde HTML". Esta vez ignoró los LF en las cadenas citadas.
fuente
Esto funcionó en Mac, usando csv y abriendo el archivo en Excel.
Usando python para escribir el archivo csv.
data = '"primera línea de la celda a1 \ r 2da línea en la celda a1 \ r 3ra línea en la celda a1", "celda b1", "1ra línea en la celda c1 \ r 2da línea en la celda c1" \ n "primera línea en celda a2 "\ n '
file.write (datos)
fuente
En MacOS intente usar Numbers
Si tiene acceso a Mac OS, he descubierto que los números de hoja de cálculo de Apple hacen un buen trabajo al eliminar un complejo archivo CSV de varias líneas que Excel no pudo manejar. Simplemente abra el
.csv
con Números y luego exporte a Excel.fuente
En mi caso, abrir CSV en notepad ++ y agregar
SEP=","
como la primera línea me permite abrir CSV con saltos de línea y utf-8 en Excel sin problemasfuente
Reemplace el separador con TAB (\ t) en lugar de coma (,). Luego abra el archivo en su editor (Bloc de notas, etc.), copie el contenido desde allí, luego péguelo en el archivo de Excel.
fuente
Los saltos de línea entre comillas dobles están perfectamente bien según el estándar CSV. El análisis de saltos de línea en Excel depende de la configuración del sistema operativo del separador de lista:
Windows: debe configurar el separador de lista como coma (Región e idioma »Formatos» Avanzado) Fuente: /superuser/238944/how-to-force-excel-to-open-csv-files- con-datos-dispuestos-en-columnas # answer-633302
Mac: necesita cambiar la región a EE. UU. (Luego, volver a cambiar manualmente otras configuraciones según sus preferencias) Fuente: https://answers.microsoft.com/en-us/mac/forum/macoffice2016-macexcel/line-separator-comma -semicolon-in-excel-2016-for / 7db1b1a0-0300-44ba-ab9b-35d1c40159c6 (ver la respuesta de NewmanLee)
No olvide cerrar Excel completamente antes de volver a intentarlo.
He replicado con éxito el problema y pude solucionarlo usando lo anterior tanto en Max como en Windows.
fuente