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.
fonte
Respostas:
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.
fonte
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.
fonte
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:
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:
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:
Espero que isso ajude alguém.
fonte
=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 ??? )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!
fonte
Resposta curta
Remova os caracteres de nova linha / avanço de linha (
\n
com 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.fonte
\n
entre linhas e\r\n
valores internos. Acabou de remover o último no Notepad ++.+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 ++.
fonte
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"
fonte
Use o Planilhas Google e importe o arquivo CSV.
Em seguida, você pode exportar isso para usar no Excel
fonte
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!
fonte
Cole no Notepad ++, selecione Codificação> Codificar em ANSI, copie tudo novamente e cole no Excel :)
fonte
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 -
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)
fonte
Minha experiência com o Excel 2010 no WinXP com configurações regionais em francês
fonte
O Excel está incrivelmente quebrado ao lidar com CSVs. O LibreOffice faz um trabalho muito melhor. Então, eu descobri que:
fonte
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:Em seguida, instale o csvkit em um ambiente virtual e use
csvjson
para alimentar o arquivo de entrada para o nosso script. É uma boa idéia desativar a adivinhação de tipo de célula com o-I
argumento:Agora
output.html
pode ser importado no Excel. Quebras de linha nas células serão preservadas.Opcionalmente, convém limpar seu ambiente virtual Python:
fonte
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.
fonte
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 /
fonte
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.
fonte
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.
fonte
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)
fonte
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
.csv
com Numbers e exportar para o Excel.fonte
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 problemasfonte
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.
fonte
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:
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
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.
fonte