Importando CSV com quebras de linha no Excel 2007


129

Estou trabalhando em um recurso para exportar os resultados da pesquisa para um arquivo CSV a ser aberto no Excel. Um dos campos é um campo de texto livre, que pode conter quebras de linha, vírgulas, cotações etc. Para compensar isso, coloquei o campo entre aspas duplas (").

No entanto, quando importo os dados para o Excel 2007, defino o delimitador apropriado e defino o qualificador de texto como aspas duplas, as quebras de linha ainda estão criando novos registros nas quebras de linha, onde eu esperaria ver o campo de texto inteiro em um célula única.

Eu também tentei substituir CR / LF (\ r \ n) por apenas CR (\ r) e novamente por apenas LF (\ n), mas sem sorte.

Alguém mais encontrou esse comportamento? Em caso afirmativo, como você o corrigiu?

TIA,
-J

EDIT:
Aqui está um arquivo rápido que escrevi à mão para duplicar o problema.

ID, Nome, Descrição
"12345", "Smith, Joe", "Ei.
Meu nome é Joe."

Quando importo isso no Excel 2007, acabo com uma linha de cabeçalho e dois registros. Observe que a vírgula em "Smith, Joe" está sendo tratada corretamente. São apenas as quebras de linha que estão causando problemas.


Analisei o arquivo CSV no Notepad ++ e tudo parece estar correto. Eu tenho outros campos com vírgulas e eles estão sendo importados corretamente. São apenas as quebras de linha que estão causando problemas.
precisa saber é o seguinte

4
Tenho problemas com arquivos .csv UTF8 com dados de várias linhas e excel. Acabei fazendo o upload do arquivo para o Google Docs, abrindo-o em uma planilha do Google e fazendo o download como um arquivo .xls. Funciona bem para mim dessa maneira.
creuzerm

Respostas:


53

O Excel (pelo menos no Office 2007 no XP) pode se comportar de maneira diferente, dependendo de um arquivo CSV ser importado, abrindo-o no menu Arquivo-> Abrir ou clicando duas vezes no arquivo no Explorer.

Eu tenho um arquivo CSV que está na codificação UTF-8 e contém novas linhas em algumas células. Se eu abrir esse arquivo no menu Arquivo do Excel -> Abrir, o assistente "importar CSV" será exibido e o arquivo não poderá ser importado corretamente: as novas linhas iniciam uma nova linha, mesmo quando citadas. Se eu abrir esse arquivo clicando duas vezes nele em uma janela do Explorer, ele será aberto corretamente sem a intervenção do assistente.


1
Alguma idéia de como obter as mesmas configurações do clique duplo?
Michiel Thalen

7
É verdade! Que estranho.
David

5
Se você estiver usando configurações regionais alemão você tem que usar ponto e vírgula (;) em vez de vírgula (,) no seu CSV para o clique duplo para o trabalho ...
user1859022

3
Não funcionou para mim. Com "," como delimitador, abriu tudo em uma coluna com um clique duplo. Com ";" como delimitador, ele foi importado corretamente, exceto pelos campos de texto de várias linhas, que foram importados como vários registros. Eu tenho o Excel 2010
Andrej Adamenko

2
@ user1859022 Dobro isso para a localidade húngara. na verdade qualquer localidade que usa a vírgula como separador decimal tem que usar ponto e vírgula como separador de campo para o duplo-clique CSV abrir para funcionar corretamente
robotik

42

Nenhuma das soluções sugeridas funcionou para mim.

O que realmente funciona (com qualquer codificação):

Copie / cole dados do arquivo csv (abra no Editor) e execute "texto nas colunas" -> não funciona, tudo bem.

Vá para a próxima guia e copie / cole novamente (a mesma coisa que você já tem na sua área de transferência) -> funciona automaticamente agora.


2
No meu caso, isso funcionou, de certa forma: reduziu corretamente o CSV para os registros únicos, mas removeu todos os dados em um campo após a nova linha.
Lilienthal 25/05

1
Isso funcionou, alguma idéia de por que não funciona ao importar o csv do excel?
Rafael Sisto

1
Posso confirmar que isso funciona, você pode colar ainda mais dados em planilhas diferentes sem repetir o comando "texto para colunas". Isso é útil se você precisar importar vários arquivos.
25416 Alex

1
Por que isso funciona, mas não abre o CSV ou adiciona-o como Dados de texto com todas as configurações adequadas? Obrigado pela dica. A equipe Copiar / Colar precisa conversar com a equipe de importação de dados!
AlexGIS # 7/16

2
Puta merda. isso realmente funciona. e meio que faz sentido o porquê. Ao criar um "texto para colunas", o Excel lembra as configurações e ele se transforma automaticamente. Quando o texto já estiver separado em linhas, ele parecerá linha por linha e ignorará as novas linhas. Eu acho que a MS deve incluir uma caixa de seleção para manter o comportamento ou verificar novamente os dados. Eu não me importo, ... se enlouquecendo obras
user853710

28

Se você estiver fazendo isso manualmente, baixe o LibreOffice e use o LibreOffice Calc para importar seu CSV. Ele faz um trabalho muito melhor com coisas como essa do que qualquer versão do Excel que eu tentei e pode salvar no XLS ou XLSX conforme necessário, se você precisar transferir para o Excel posteriormente.

Mas se você está preso ao Excel e precisa de uma correção melhor, parece haver uma maneira. Parece ser dependente da localidade (o que parece idiota, na minha humilde opinião). Não tenho o Excel 2007, mas o Excel 2010 e o exemplo dado:

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

não funciona Escrevi no bloco de notas e escolhi Salvar como ... e ao lado do botão Salvar, você pode escolher a codificação. Eu escolhi o UTF-8 como sugerido, mas sem sorte. Alterar as vírgulas para ponto e vírgula funcionou para mim, no entanto. Não mudei mais nada e funcionou. Então, mudei o exemplo para ficar assim e escolhi a codificação UTF-8 ao salvar no bloco de notas:

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

Mas há um problema! A única maneira de funcionar é se você clicar duas vezes no arquivo CSV para abri-lo no Excel. Se eu tentar importar dados do texto e escolher esse CSV, ele ainda falhará nas novas linhas citadas.

Mas tem outro pegadinha! O separador de campos de trabalho (vírgula no exemplo original, ponto e vírgula no meu caso) parece depender das Configurações regionais do sistema (definidas em Painel de controle -> Região e idioma). Na Noruega, vírgula é o separador decimal. O Excel parece evitar esse caractere e prefere um ponto-e-vírgula. Eu tenho acesso a outro computador definido como localidade em inglês do Reino Unido e, nesse computador, o primeiro exemplo com um separador de vírgula funciona bem (apenas com um clique duplo) e aquele com ponto e vírgula realmente falha! Tanta coisa para interoperabilidade. Se você deseja publicar este CSV online e os usuários podem ter o Excel, acho que você deve publicar as duas versões e sugerir que as pessoas verifiquem qual arquivo fornece o número correto de linhas.

Portanto, todos os detalhes que pude reunir para que isso funcionasse são:

  1. O arquivo deve ser salvo como UTF-8 com uma BOM, que é o que o Bloco de Notas faz quando você escolhe UTF-8. Tentei o UTF-8 sem BOM (pode ser alternado facilmente no Notepad ++), mas, em seguida, clicar duas vezes no documento falha.
  2. Você deve usar uma vírgula ou um separador de ponto e vírgula, mas não aquele que é o separador decimal em suas Configurações regionais. Talvez outros personagens funcionem, mas não sei qual.
  3. Você deve citar os campos que contêm uma nova linha com o caractere ".
  4. Eu usei finais de linha do Windows (\ r \ n) tanto no campo de texto quanto como um separador de registros, que funciona.
  5. Você deve clicar duas vezes no arquivo para abri-lo, a importação de dados do texto não funciona.

Espero que isso ajude alguém.


Além disso, o truque mencionado por @sdplus parece funcionar! Acho que o que acontece é que, quando você cola e faz uma manobra de "texto para colunas" pela primeira vez, está configurando o material de aspas e separadores de campos no Excel. Na segunda vez em que você cola, ele usa essa configuração e divide os dados corretamente em colunas com base na configuração. Mas esta parece ser uma abordagem muito manual.
Ketil

sim, toda vez que você importa um texto ou faz um texto para uma coluna, recalibra como a cópia / colar funcionará na sessão especificada. ele é aplicado até às novas pastas de trabalho criadas, até você fechar o Excel. também pode ser frustrante. Depois de usar um determinado separador para importação, ele separará seu texto, mesmo que você queira colar uma frase em uma célula. você precisa refazer a importação com a guia como separador ou reiniciar o Excel para interrompê-lo.
robotik 28/07

Seu truque realmente parece funcionar. Mas parece que o ponto e vírgula não tem nada a ver com a solução. O problema é que o Excel trata arquivos CSV de maneira diferente, dependendo das configurações regionais. Eu sou da Alemanha e, para mim, os arquivos CSV do Excel sempre têm ponto e vírgula em vez de vírgulas (a razão para isso é que, na Alemanha, o separador decimal é vírgula em vez de ponto). A solução real parece ser que o Excel carrega arquivos CSV totalmente diferentes de todos os outros arquivos de texto. Portanto, os arquivos CSV que contêm quebras de linha entre aspas parecem funcionar. Todos os outros arquivos de texto não.
Martini Bianco

@ Martini, sim, eu tenho o Excel norueguês e também usamos vírgula como separador decimal, por isso mencionei como isso depende das configurações regionais (embora eu tenha me referido como localidade). Talvez eu deva reformular para maior clareza.
Ketil

Esta é a resposta para todas as pessoas em regiões onde a vírgula é o separador decimal. Observe que, para essas regiões, o Excel também usa ponto-e-vírgula como separador de argumentos da fórmula (em =FOO(1;2)vez de =FOO(1,2)), mas claramente está incorreto que o Excel aplique isso a um analisador de formato de arquivo (que outro programa analisa um formato de arquivo padrão dependente da localidade ??? )
leemes

25

Finalmente encontrei o problema!

Acontece que estávamos escrevendo o arquivo usando a codificação Unicode, em vez de ASCII ou UTF-8. Alterar a codificação no FileStream parece resolver o problema.

Obrigado a todos por todas as suas sugestões!


29
A codificação ASCII não pareceu corrigir o problema para mim (no MacOS), e eu não tenho um espaço à esquerda e meu campo é citado. O mesmo documento exato importa bem no Google Docs. Que frustrante. BTW, não existe um arquivo de texto codificado em "Unicode". Tem que ser uma das implementações do Unicode (UTF-8, UTF-16, UTF-32, etc.) #
Ben Ben

11
Obrigado pela solução. Ainda estava curioso para saber qual é a resposta, então tentei criar um csv com uma quebra de linha no Excel e ver o que ele salvou. Acontece que o Excel usa apenas um feed de linha para uma nova linha em uma célula. Se eu tentar criar o mesmo csv no bloco de notas, ele usará um avanço de linha + retorno de carro para a quebra de linha. Portanto, para quebras de linha em uma única célula, verifique se está usando apenas um avanço de linha (LF ou \ n) e não um retorno de carro (CR ou \ r). O Excel usa os dois para finalizar uma linha.
Xr280xr

1
Codificação ASCII não corrigir o problema para mim também - Excel 2000, Windows 7.
ChrisJJ

1
Para o OS X no Macintosh, salve como "Windows Comma Separated (csv)". Isso adiciona novas linhas em vez de quebras de linha. Ele será listado no menu suspenso para formatos em "Formatos especializados".
taco

Qual codificação Unicode deve ser usada (UTF-8, UTF-16)?
Andrej Adamenko

7

Resposta curta

Remova os caracteres de nova linha / avanço de linha ( \ncom o Notepad ++). O Excel ainda reconhecerá o caractere de retorno de carro ( \r) para separar registros.

Resposta longa

Como mencionado, os caracteres de nova linha são suportados nos campos CSV, mas o Excel nem sempre os trata normalmente. Eu enfrentei um problema semelhante com um CSV de terceiros que possivelmente tinha problemas de codificação, mas não melhorou com as alterações de codificação.

O que funcionou para mim foi remover todos os caracteres de nova linha ( \n). Isso tem o efeito de recolher os campos em um único registro, supondo que seus registros sejam separados pela combinação de um retorno de carro e uma nova linha (CR / LF). O Excel importará adequadamente o arquivo e reconhecerá novos registros pelo retorno de carro.

Obviamente, uma solução mais limpa é primeiro substituir as novas linhas reais ( \r\n) por uma combinação de caracteres temporária, substituindo as novas linhas ( \n) pelo seu caractere de escolha separado (por exemplo, vírgula em um arquivo de ponto e vírgula) e depois substituindo os caracteres temporários por novas linhas apropriadas novamente.


1
Eu tive a situação oposta: \nentre linhas e \r\nvalores internos. Acabou de remover o último no Notepad ++.
Rarst

5

+1 no comentário de J Ashley. Também encontrei esse problema. Acontece que o Excel requer:

  • Um caractere de nova linha ("\ n") na cadeia de caracteres citada

  • Um retorno de carro e uma nova linha entre cada linha.

Por exemplo, "Teste", "Item multilinha \ n item multilinha" \ r \ n "Test2", "Item multilinha \ n item multilinha" \ r \ n

Usei o bloco de notas ++ para delimitar cada linha corretamente e usar apenas novas linhas na string. Descobriu isso criando entradas de várias linhas em um documento em branco do Excel e abrindo o csv no bloco de notas ++.


ele trabalhou para mim com personagem só de nova linha tanto como um item de várias linhas e um separador de linha, uma vez que eu definir o separador de campo de acordo com o meu local
robotik

4

Se o campo contiver um espaço à esquerda, o Excel ignorará as aspas duplas como um qualificador de texto. A solução é eliminar os espaços à esquerda entre vírgula (separador de campo) e aspas duplas. Por exemplo:

Quebrado:
Nome, Título, Descrição
"John", "Sr.", "Minha descrição detalhada"

Trabalho:
Nome, Título, Descrição
"John", "Mr.", "Minha descrição detalhada"


2
Concordo, no entanto, não tenho espaços à esquerda na minha saída. Alguma ideia?
Jeremyalan

precisamos da linha quebrada :(
Luke

4

Use o Planilhas Google e importe o arquivo CSV.

Em seguida, você pode exportar isso para usar no Excel


1
Boa dica! Esse é o método de conversão mais conveniente se você estiver bem com o upload do seu CSV para um serviço de terceiros (por exemplo, dados não confidenciais). Observe que talvez você precise definir manualmente o delimitador na importação. E pode ser necessário ajustar o tamanho da célula no arquivo Excel resultante para que seja exibido corretamente.
M000

Também funciona com o Excel no Office 365 em um navegador. Não foi possível abrir adequadamente um CSV com quebras de linha dentro das células com o aplicativo Excel para desktop (tentando a maioria das sugestões desta página), mas o Excel no office.com poderia abri-lo corretamente.
georg w.

3

Se alguém tropeçar nesse tópico e estiver procurando uma resposta definitiva aqui, vá (dê crédito à pessoa que menciona o LibreOffice:

1) Instale o LibreOffice 2) Abra o Calc e importe o arquivo 3) Meu arquivo txt teve os campos separados por e os campos de caracteres entre "4) salvam como arquivo ODS 5) Abrem o arquivo ODS no Excel 6) Salve como .xls (x) 7) Feito. 8) Isso funcionou perfeitamente para mim e me salvou MUITO!


3
sem necessidade de salvar como ODS, o LibreOffice pode salvar xls (x) nativamente #
robikik

2

Cole no Notepad ++, selecione Codificação> Codificar em ANSI, copie tudo novamente e cole no Excel :)


2

Eu tive um problema parecido. Eu tinha alguns dados do twitter no MySQL. Os dados continham avanço de linha (LF ou \ n). Eu tinha um requisito de exportar os dados do MySQL para o Excel. O LF estava atrapalhando minha importação do arquivo csv. Então eu fiz o seguinte -

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 - Ao substituir CRLF ou LF, não se esqueça de Marcar excedido (\ n, \ r, \ t ... Caixa de seleção [veja a parte inferior esquerda da caixa de diálogo)


2

Minha experiência com o Excel 2010 no WinXP com configurações regionais em francês

  • o separador do seu CSV importado deve corresponder ao separador da lista de suas configurações regionais (; no meu caso)
  • você deve clicar duas vezes no arquivo no explorer. não abra do Excel

1

O Excel está incrivelmente quebrado ao lidar com CSVs. O LibreOffice faz um trabalho muito melhor. Então, eu descobri que:

  • O arquivo deve ser codificado em UTF-8 com BOM, portanto, considere isso para todos os pontos abaixo
  • O melhor resultado, de longe, é alcançado abrindo-o no File Explorer
  • Se você abri-lo no Excel, há dois resultados possíveis:
    • Se tiver apenas caracteres ASCII, provavelmente funcionará
    • Se tiver caracteres não-ASCII, ele estragará as quebras de linha
  • Parece ser fortemente dependente do separador decimal configurado nas configurações regionais do sistema operacional, então você deve selecionar o caminho certo
  • Aposto que também pode se comportar de maneira diferente, dependendo da versão do SO e do Office

Você está afirmando LibreOffice é um melhor guesser ao Excel, certo? O Excel faz todas as perguntas certas ao importar arquivos de texto, a menos que você diga para adivinhar.
quer

1
Obrigado! Isso me ajuda a converter meu CSV de "UTF-8 sem BOM" para "UTF-8 com BOM" (apenas "UTF-8" no menu) pelo Notepad ++. Então eu apenas abri-lo no Explorer e o Excel mostrou-o de maneira adequada com símbolos corretos e quebras de linha corretas dentro das células. Quando o abri na codificação "UTF-8 sem BOM" padrão, a partir da quebra de linha importada do Explorer Excel corretamente, mas exibe símbolos não latinos de maneira incorreta. Se eu o abrisse no Excel, ele mostraria a codificação da maneira correta, mas não lidaria com quebras de linha.
Sergey Beloglazov

1

Visão geral

Quase 10 anos após a postagem original, o Excel não melhorou na importação de arquivos CSV. No entanto, descobri que é muito melhor importar tabelas HTML. Portanto, pode-se usar o Python para converter CSV em HTML e depois importar o HTML resultante para o Excel.

As vantagens dessa abordagem são: (a) funciona de maneira confiável, (b) você não precisa enviar seus dados para um serviço de terceiros (por exemplo, folhas do Google), (c) não são necessárias instalações "gordas" extras (LibreOffice, Números etc.) para a maioria dos usuários, (d) nível mais alto do que interferir com caracteres CR / LF e marcadores de BOM, (e) não é necessário mexer nas configurações de localidade.

Passos

As etapas a seguir podem ser executadas em qualquer shell semelhante ao bash, desde que o Python 3 esteja instalado. Embora o Python possa ser usado para ler diretamente o CSV, o csvkit é usado para fazer uma conversão intermediária em JSON. Isso nos permite evitar lidar com as complexidades do CSV em nosso código Python.

Primeiro, salve o seguinte script como json2html.py. O script lê um arquivo JSON do stdin e o despeja como uma tabela 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>")

Em seguida, instale o csvkit em um ambiente virtual e use csvjsonpara alimentar o arquivo de entrada para o nosso script. É uma boa idéia desativar a adivinhação de tipo de célula com o -Iargumento:

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

Agora output.htmlpode ser importado no Excel. Quebras de linha nas células serão preservadas.

Opcionalmente, convém limpar seu ambiente virtual Python:

$ deactivate
$ rm -rf pyenv

1

Isto é para o Excel 2016:

Só tive o mesmo problema com quebras de linha dentro de um arquivo csv com o Assistente do Excel.

Depois, tentei com o recurso "Nova consulta": Dados -> Nova consulta -> Do arquivo -> Do CSV -> Escolha o arquivo -> Importar -> Carregar

Estava funcionando perfeitamente e uma solução muito rápida para todos que têm o mesmo problema.


0

O que acabou de funcionar para mim, importar diretamente para o Excel, desde que a importação seja feita como um formato de texto e não como um formato CSV. M /


0

basta criar uma nova planilha com células com quebra de linha, salve-a no csv e abra-a com um editor que possa mostrar os caracteres de final de linha (como o bloco de notas ++). Ao fazer isso, você notará que uma quebra de linha em uma célula é codificada com LF enquanto um final de linha "real" é codificado com CR LF. Agora, agora você sabe como gerar um arquivo CSV "correto" para o Excel.


0

Eu também tive esse problema: ou seja, arquivos csv (delimitado por vírgulas, strings delimitadas por aspas duplas) com LF em strings entre aspas. Esses arquivos foram baixados do Square. Fiz uma importação de dados, mas em vez de importar como arquivos de texto, importei como "do HTML". Desta vez, ignorou os LFs nas strings citadas.


0

Isso funcionou no Mac, usando csv e abrindo o arquivo no Excel.

Usando python para gravar o arquivo csv.

data = '"primeira linha da célula a1 \ r 2ª linha na célula a1 \ r 3ª linha na célula a1", "célula b1", "1ª linha na célula c1 \ r 2ª linha na célula c1" \ n "primeira linha na célula a2 "\ n '

file.write (dados)


0

No MacOS, tente usar o Numbers

Se você tiver acesso ao Mac OS, descobri que a planilha da Apple Numbers faz um bom trabalho ao desmarcar um arquivo CSV multilinhas complexo que o Excel não conseguia lidar. Basta abrir o .csvcom Numbers e exportar para o Excel.


0

No meu caso, abrir o CSV no bloco de notas ++ e adicionar SEP=","como primeira linha permite abrir o CSV com quebras de linha e o utf-8 no Excel sem problemas


0

Substitua o separador por TAB (\ t) em vez de vírgula (,). Em seguida, abra o arquivo no seu editor (bloco de notas etc.), copie o conteúdo de lá e cole-o no arquivo do Excel.


Tente isto em arquivos grandes :)
chukko

-1

As quebras de linha entre aspas duplas são perfeitas, de acordo com o padrão CSV. A análise de quebras de linha no Excel depende da configuração do SO do separador de listas:

  1. Windows: você precisa definir o separador de lista como vírgula (Região e idioma »Formatos» Avançado) Fonte: /superuser/238944/how-to-force-excel-to-open-csv-files- com dados organizados em colunas # answer-633302

  2. Mac: é necessário alterar a região para EUA (em seguida, alterar manualmente outras configurações de acordo com sua preferência). Fonte: https://answers.microsoft.com/en-us/mac/forum/macoffice2016-macexcel/line-separator-comma -semicolon-in-excel-2016-for / 7db1b1a0-0300-44ba-ab9b-35d1c40159c6 (consulte a resposta de NewmanLee)

Não se esqueça de fechar o Excel completamente antes de tentar novamente.

Eu repliquei o problema com êxito e consegui corrigi-lo usando o descrito acima no Max e no Windows.


Eu não acho que isso funciona. Eu exportei um CSV com quebras de linha nas células do próprio Excel. Como a localidade não foi alterada, o Excel deveria poder carregá-lo corretamente. Mas não pode. Ele ainda mexe com as quebras de linha nas células.
M000 4/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.