Importar CSV con saltos de línea en Excel 2007

129

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.

jeremyalan
fuente
He mirado el archivo CSV en Notepad ++, y todo parece ser correcto. Tengo otros campos con comas, y se están importando correctamente. Son solo los saltos de línea los que están causando problemas.
jeremyalan
44
Tengo problemas con los archivos .csv UTF8 con datos de varias líneas y excel. Terminé subiendo el archivo a Google Docs, abriéndolo en una hoja de Google y luego descargándolo como un archivo .xls. Funciona bien para mí de esta manera.
creuzerm

Respuestas:

53

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.

J Ashley
fuente
1
¿Alguna idea de cómo obtener la misma configuración que con hacer doble clic?
Michiel Thalen
77
¡Es verdad! Que extraño.
David
55
Si está utilizando la configuración regional alemana, debe usar punto y coma (;) en lugar de coma (,) en su csv para que el doble clic funcione ...
user1859022
3
A mi no me sirvió. Con "," como delimitador, abrió todo en una columna con doble clic. Con ";" como delimitador se importó correctamente, excepto los campos de texto de varias líneas, que se importaron como varios registros. Tengo Excel 2010
Andrej Adamenko
2
@ user1859022 Duplico eso para la configuración regional húngara. En realidad, cualquier configuración regional que use una coma como separador decimal debe usar punto y coma como separador de campo para que el csv abierto de doble clic funcione correctamente
robotik
42

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.

sdplus
fuente
2
En mi caso, esto funcionó, de alguna manera: colapsó correctamente el CSV en los registros individuales, pero eliminó todos los datos en un campo más allá de la nueva línea.
Lilienthal
1
Esto funcionó, ¿alguna idea de por qué no funciona al importar el csv de Excel?
Rafael Sisto
1
Puedo confirmar que esto funciona, incluso puede pegar más datos en diferentes hojas sin repetir el comando "texto a columnas". Esto es útil si necesita importar varios archivos.
Alex
1
¿Por qué funciona esto pero no abrir el CSV o agregarlo como datos de texto con todas las configuraciones adecuadas no funciona? Gracias por el consejo. ¡El equipo Copiar / Pegar necesita hablar con el equipo de importación de datos!
alexGIS
2
Mierda Esto realmente funciona. y tiene sentido por qué. Al hacer un "texto a columnas", Excel recuerda la configuración y se transformará automáticamente. Cuando tenga el texto ya separado en filas, se verá fila por fila e ignorará las nuevas líneas. Creo que MS debería incluir una casilla de verificación para mantener el comportamiento o volver a analizar los datos. No me importa ... si el
jodido
28

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:

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 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:

ID;Name;Description
"12345";"Smith, Joe";"Hey.
My name is Joe."

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:

  1. El archivo debe guardarse como UTF-8 con una BOM, que es lo que hace el Bloc de notas cuando elige UTF-8. Intenté UTF-8 sin BOM (se puede cambiar fácilmente en Notepad ++), pero luego hago doble clic en el documento.
  2. 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.
  3. Debe citar los campos que contienen una nueva línea con el "carácter".
  4. He usado los finales de línea de Windows (\ r \ n) tanto en el campo de texto como como separador de registros, eso funciona.
  5. 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.

ketil
fuente
Además, ¡el truco mencionado por @sdplus parece funcionar! Creo que lo que sucede es que cuando pegas por primera vez y haces una maniobra de "texto a columnas", estás configurando las cosas de comillas y separadores de campo en Excel. La segunda vez que pega, utiliza esta configuración y divide los datos correctamente en columnas según la configuración. Pero esto parece ser un enfoque muy manual.
ketil
Sí, cada vez que importa texto o hace un texto a columna, recalibra cómo funcionará copiar / pegar en la sesión dada. incluso se aplica a los nuevos libros de trabajo que cree, hasta que cierre Excel. También puede ser frustrante. una vez que use un separador dado para importar, separará su texto por eso, incluso si solo desea pegar una oración en una celda. debe rehacer la importación con la pestaña como separador o reiniciar Excel para detenerlo.
robotik
Tu truco realmente parece funcionar. Pero parece que el punto y coma no tiene nada que ver con la solución. El problema es que Excel trata los archivos CSV de manera diferente, según la configuración regional. Soy de Alemania, y para mí los archivos CSV de Excel siempre tienen punto y coma en lugar de comas (la razón de esto es que en Alemania el separador decimal es una coma en lugar de un punto). La solución real parece ser que Excel carga archivos CSV totalmente diferentes a todos los demás archivos de texto. Por lo tanto, los archivos CSV que contienen saltos de línea entre citas parecen funcionar. Todos los demás archivos de texto no.
Martini Bianco
@Martini, sí, tengo Norwegian Excel y también usamos comas como separador decimal, así que mencioné cómo esto depende de la configuración regional (aunque me referí a él como la configuración regional). Quizás debería reformular para mayor claridad.
ketil
Esta es la respuesta para todas las personas en regiones donde la coma es el separador decimal. Tenga en cuenta que para estas regiones, Excel también usa punto y coma como separador de argumentos de fórmula (en =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? )
leemes
25

¡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!

jeremyalan
fuente
29
La codificación ASCII no pareció solucionar el problema para mí (aunque en MacOS), y no tengo un espacio inicial y mi campo se cita. El mismo documento exactamente importa bien en Google Docs. Que frustrante. Por cierto, no existe un archivo de texto codificado "Unicode". Tiene que ser una de las implementaciones de Unicode (UTF-8, UTF-16, UTF-32, etc.)
Ben
11
Gracias por la solucion. Todavía tenía curiosidad por saber cuál es la respuesta, así que intenté crear un csv con un salto de línea en Excel y ver qué guardaba. Resulta que Excel usa solo un avance de línea para una nueva línea en una celda. Si intento crear el mismo csv en el Bloc de notas, usará un avance de línea + retorno de carro para el salto de línea. Entonces, para los saltos de línea en una sola celda, asegúrese de que solo esté usando un avance de línea (LF o \ n) y no un retorno de carro (CR o \ r). Excel usa ambos para terminar una fila.
xr280xr
1
La codificación ASCII tampoco solucionó el problema para mí - Excel 2000, Windows 7.
ChrisJJ
1
Para OS X en Macintosh, guarde como "Windows Comma Separated (csv)". Esto agrega nuevas líneas en lugar de saltos de línea. Aparecerá en el menú desplegable para formatos en "Formatos especiales".
taco
¿Qué codificación Unicode se debe usar (UTF-8, UTF-16)?
Andrej Adamenko
7

Respuesta corta

Elimine los caracteres de nueva línea / salto de línea ( \ncon 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.

Lilienthal
fuente
1
Tuve la situación opuesta: \nentre líneas y \r\nvalores internos. Acabo de quitar el último en Notepad ++.
Rarst
5

+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 ++.

Iventio
fuente
que trabajó para mí con el carácter de nueva línea única tanto como un elemento de varias líneas y un separador de fila, una vez que me puse el separador de campo de acuerdo a mi local
Robótica
4

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"

Jeremy
fuente
2
Estoy de acuerdo, sin embargo, no tengo espacios iniciales en mi salida. ¿Algunas ideas?
jeremyalan
necesitamos la línea quebrada :(
Lucas
4

Use las Hojas de cálculo de Google e importe el archivo CSV.

Luego puede exportar eso para usar en Excel

Mazzy
fuente
1
¡Buen consejo! Este es el método de conversión más conveniente si está de acuerdo con cargar su CSV a un servicio de terceros (es decir, datos no confidenciales). Tenga en cuenta que puede que tenga que configurar manualmente el delimitador en la importación. Y es posible que deba ajustar el tamaño de celda en el archivo Excel resultante para que se muestre correctamente.
m000 el
También funciona con Excel en Office 365 en un navegador. No pude abrir correctamente un CSV con saltos de línea dentro de las celdas con la aplicación Excel de escritorio (probando la mayoría de las sugerencias de esta página), pero Excel en office.com podría abrirlo correctamente.
georg w.
3

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!

Rock Rico
fuente
3
no es necesario guardar como ODS, LibreOffice puede guardar xls (x) de forma nativa
robotik
2

Pegue en Notepad ++, seleccione Codificación> Codificar en ANSI, copie todo de nuevo y pegue en Excel :)

Aaron Dake
fuente
2

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:

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: 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)

Parné
fuente
2

Mi experiencia con Excel 2010 en WinXP con configuración regional francesa

  • el separador de su csv importado debe corresponder al separador de lista de su configuración regional (; en mi caso)
  • debe hacer doble clic en el archivo desde el explorador. no lo abras desde Excel
pingouinshark
fuente
1

Excel está increíblemente roto cuando se trata de CSV. LibreOffice hace un trabajo mucho mejor. Entonces, descubrí que:

  • El archivo debe estar codificado en UTF-8 con BOM, así que considere esto para todos los puntos a continuación
  • El mejor resultado, de lejos, se logra al abrirlo desde el Explorador de archivos
  • Si lo abre desde Excel, hay dos resultados posibles:
    • Si solo tiene caracteres ASCII, lo más probable es que funcione
    • Si tiene caracteres no ASCII, ensuciará los saltos de línea.
  • Parece depender en gran medida del separador decimal configurado en la configuración regional del sistema operativo, por lo que debe seleccionar el correcto
  • Apuesto a que también puede comportarse de manera diferente dependiendo del sistema operativo y la versión de Office
indefinido
fuente
Estás afirmando que LibreOffice es un mejor adivinador que Excel, ¿verdad? Excel hace todas las preguntas correctas al importar archivos de texto, a menos que le diga que adivine.
Tom Blodget
1
¡Gracias! Me ayuda a convertir mi CSV de "UTF-8 sin BOM" a "UTF-8 con BOM" (simplemente "UTF-8" en el menú) mediante Notepad ++. Luego lo abrí desde Explorer y Excel lo mostró de manera adecuada con los símbolos correctos y los saltos de línea correctos dentro de las celdas. Cuando lo abrí en la codificación predeterminada "UTF-8 sin BOM" de los saltos de línea importados de Explorer Excel correctamente, pero muestra los símbolos no latinos de manera incorrecta. Si lo abrí desde Excel, mostraba la codificación de la manera correcta, pero no hacía frente a los saltos de línea.
Sergey Beloglazov
1

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:

#!/usr/bin/env python3
import sys, json, html

if __name__ == '__main__':
    header_emitted = False
    make_th = lambda s: "<th>%s</th>" % (html.escape(s if s else ""))
    make_td = lambda s: "<td>%s</td>" % (html.escape(s if s else ""))
    make_tr = lambda l, make_cell: "<tr>%s</tr>" % ( "".join([make_cell(v) for v in l]) )
    print("<html><body>\n<table>")
    for line in json.load(sys.stdin):
        lk, lv = zip(*line.items())
        if not header_emitted:
            print(make_tr(lk, make_th))
            header_emitted = True
        print(make_tr(lv, make_td))
    print("</table\n</body></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 -Iargumento:

$ virtualenv -p python3 pyenv
$ . ./pyenv/bin/activate
$ pip install csvkit
$ csvjson -I input.csv | python3 json2html.py > output.html

Ahora output.htmlse 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:

$ deactivate
$ rm -rf pyenv
m000
fuente
1

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.

SaSH_17
fuente
0

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/

Martín
fuente
0

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.

desviación
fuente
0

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.

usuario3861859
fuente
0

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)

2003G35
fuente
0

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 .csvcon Números y luego exporte a Excel.

Tim
fuente
0

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 problemas

adax2000
fuente
0

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.

Ionut
fuente
Prueba esto en archivos grandes :)
chukko
-1

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:

  1. 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

  2. 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.

David Avikasis
fuente
No creo que esto funcione. Exporté un CSV con saltos de línea en celdas del propio Excel. Como la configuración regional no cambió, Excel debería haber podido cargarla correctamente. Pero no puede. Todavía se mete con los saltos de línea en las celdas.
m000 el