saltos - salto de linea en csv
Importación de CSV con saltos de línea en Excel 2007 (16)
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 en Excel 2007, establezco el delimitador adecuado y establezco el calificador de texto en 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? De ser 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", "Oye.
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 maneja correctamente. Son solo los saltos de línea los que están causando problemas.
Espero que ayude.
En MacOS, intenta usar números
Si tiene acceso a Mac OS, he descubierto que los Números de hoja de cálculo de Apple hacen un buen trabajo al desmantelar un archivo CSV complejo de múltiples líneas que Excel no puede manejar. Simplemente abra .csv
con Numbers y luego exporte a Excel.
Respuesta corta
Elimine los caracteres de nueva línea / avance de línea ( /n
con Notepad ++). Excel aún reconocerá el carácter de retorno de carro ( /r
) para separar registros.
Respuesta larga
Como los caracteres de nueva línea mencionados son compatibles dentro de los campos CSV, Excel no siempre los maneja con elegancia. 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 colapsar campos en un solo registro, suponiendo que sus registros están separados por la combinación de un retorno de carro y una línea nueva (CR / LF). Excel luego importará correctamente el archivo y reconocerá nuevos registros mediante el retorno de carro.
Obviamente, una solución más limpia es reemplazar primero las líneas nuevas reales ( /r/n
) con una combinación temporal de caracteres, reemplazando las líneas nuevas ( /n
) con el carácter separado elegido (por ejemplo, coma en un archivo punto y coma) y luego reemplazando los caracteres temporales con nuevas líneas apropiadas de nuevo.
¡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!
+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 citada
Un retorno de carro y nueva línea entre cada fila.
Por ejemplo, "Prueba", "Artículo de varias líneas / n artículo de líneas múltiples" / r / n "Test2", "Artículo de varias líneas / n elemento de líneas múltiples" / r / n
Utilicé Notepad ++ para delimitar cada fila correctamente y para usar nuevas líneas en la cadena. Descubierto esto mediante la creación de entradas de línea múltiple en un documento de Excel en blanco y la apertura de la csv en el bloc de notas ++.
Esto funcionó en Mac, utilizando 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 / 2da línea en la celda c1" / n "primera línea en celda a2 "/ n"
archivo.write (datos)
Excel (al menos en Office 2007 en XP) puede comportarse de manera diferente dependiendo de si se importa un archivo CSV abriéndolo desde el menú Archivo-> Abrir o haciendo 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 están entre comillas. Si abro este archivo haciendo doble clic en él en una ventana del Explorador, se abre correctamente sin la intervención del asistente.
Lo que funcionó para mí, importando a Excel directamente, siempre que la importación se realice en formato de texto como formato csv. METRO/
Mi experiencia con Excel 2010 en WinXP con configuraciones regionales francesas
- el separador de su csv importado debe corresponderse con el separador de lista de su configuración regional (en mi caso)
- debe hacer doble clic en el archivo desde el explorador (no lo abra desde Excel)
Ninguna de las soluciones sugeridas funcionó para mí.
Lo que realmente funciona (con cualquier codificación):
Copie / pegue datos desde el archivo csv (abra en el Editor), luego realice "texto en columnas" -> no funciona, está bien.
Vaya a la siguiente pestaña y copie / pegue nuevamente (lo mismo que ya tiene en su portapapeles) -> automágicamente funciona ahora.
Pegue en Notepad ++, seleccione Codificación> Codificar en ANSI, copie todo de nuevo y péguelo en Excel :)
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 incluidos en "4) guardar como archivo ODS 5) Abrir el archivo ODS en Excel 6) Guardar como .xls (x) 7) Hecho. 8) Esto funcionó perfectamente para mí y me salvó BIGTIME!
Si el campo contiene un espacio inicial, Excel ignora la comilla doble como un calificador de texto. La solución es eliminar los espacios iniciales entre la coma (separador de campo) y la comilla doble. Por ejemplo:
Roto:
Nombre, Título, Descripción
"John", "Mr.", "Mi descripción detallada"
Trabajando:
Nombre, Título, Descripción
"John", "Mr.", "Mi descripción detallada"
Si está haciendo esto manualmente, descargue LibreOffice y use LibreOffice Calc para importar su CSV. Hace un trabajo mucho mejor de este tipo que cualquier versión de Excel que he probado, y puede guardarlo en XLS o XLSX según sea necesario si necesita transferirlo a Excel después.
Pero si está atrapado con Excel y necesita una solución mejor, parece haber una manera. Parece ser dependiente de la localidad (lo que parece idiota, en mi humilde opinión). No tengo Excel 2007, pero tengo Excel 2010 y el ejemplo dado:
ID,Name,Description
"12345","Smith, Joe","Hey.
My name is Joe."
no funciona Lo escribí en el Bloc de notas y elegí Guardar como ..., y al lado del botón Guardar puede elegir la codificación. Elegí UTF-8 como se sugirió, pero sin suerte. Sin embargo, cambiar las comas a punto y coma me funcionó. 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:
ID;Name;Description
"12345";"Smith, Joe";"Hey.
My name is Joe."
¡Pero hay un truco! La única forma en que funciona es haciendo doble clic en el archivo CSV para abrirlo en Excel. Si trato de importar datos del texto y elijo este CSV, aún falla en las líneas nuevas citadas.
¡Pero hay otra trampa! El separador del 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 el Panel de control -> Región e idioma). En Noruega, la coma es el separador decimal. Excel parece evitar este personaje y prefiere un punto y coma en su lugar. Tengo acceso a otra computadora con configuración regional en 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 realmente falla! Tanto para la interoperabilidad. Si desea publicar este archivo CSV en línea y los usuarios pueden tener Excel, creo que debe publicar ambas versiones y sugerir a las personas que verifiquen qué archivo proporciona el número correcto de filas.
Así que todos los detalles que he podido reunir para hacer que esto funcione son:
- El archivo debe guardarse como UTF-8 con una lista de materiales, que es lo que hace el Bloc de notas cuando elige UTF-8. Probé UTF-8 sin BOM (se puede cambiar fácilmente en el Notepad ++), pero al hacer doble clic en el documento falla.
- Debe usar una coma o un separador de punto y coma, pero no el que es el separador decimal en su configuración regional. Quizás otros personajes funcionen, pero no sé cuál.
- Debe citar los campos que contienen una nueva línea con el "carácter".
- He usado los finales de línea de Windows (/ r / n) tanto en el campo de texto como en el separador de registros, eso funciona.
- Debe hacer doble clic en el archivo para abrirlo; la importación de datos desde el texto no funciona.
Espero que esto ayude a alguien.
También tuve este problema: es decir, archivos csv (delimitados por comas, cadenas delimitadas por comillas dobles) con LF en cadenas entre comillas. Estos fueron archivos descargados de Square. Realicé una importación de datos, pero en lugar de importar como archivos de texto, importé como "de HTML". Esta vez ignoró los LF en las cadenas entre comillas.
Tuve un problema similar. Tenía algunos datos de Twitter en MySQL. Los datos tenían Line feed (LF o / n) con en 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:
1. From MySQL exported to CSV with Record separator as CRLF
2. Opened the data in notepad++
3. Replaced CRLF (/r/n) with some string I am not expecting in the Data. I used ###~###! as replacement of CRLF
4. Replaced LF (/n) with Space
5. Replaced ###~###! with /r/n, so my record separator are back.
6. Saved and then imported into Excel
NOTA- Mientras reemplaza CRLF o LF, no olvide marcar Excedido (/ n, / r, / t ... Casilla de verificación [observe la parte inferior izquierda del cuadro de diálogo]
solo crea una nueva hoja con celdas con linebreak, guárdala en csv y luego ábrela con un editor que pueda mostrar los caracteres de final de línea (como notepad ++). Al hacer esto, notará que un salto de línea en una celda está codificado con LF, mientras que un final "real" de línea es un código con CR LF. Voilà, ahora sabes cómo generar un archivo csv "correcto" para Excel.