Importar do arquivo de texto delimitado por tabulações no Excel - o caractere CR nas aspas é ignorado

1

Eu tenho um grande arquivo TXT delimitado com TAB .
O texto é colocado entre aspas, mas o Excel ainda divide os valores em duas linhas quando um caractere CR aparece dentro da string encapsulada.

Existe alguma maneira de forçar o Excel a não quebrar linhas?

    
por AcePL 29.05.2018 / 18:41

1 resposta

1

A resposta a seguir destaca parcialmente o problema.

Como J Ashley aponta corretamente, há uma diferença entre o modo como o Excel lida com o arquivo CSV ao clicar duas vezes em File-> Open (ou Data- > import).

Além da observação de J Ashley, eu testei e concluí o seguinte:

  • Quando os campos encapsulados contêm \ n (LF) ou \ r \ n (CR-LF), eles abrem corretamente quando você clica duas vezes, mas produz o problema mencionado por OP ao usar Arquivo- > Abrir (ou importar)
  • Quando os campos encapsulados contêm \ r (CR), eles produzem o problema mencionado pelo OP, não importa o que você faça. Usando UTF8-BOM, No bom, clique duas vezes em File -> Open, Data - > Import ... sempre com o mesmo problema.

Portanto, não parece haver nenhuma maneira de contornar esse problema no Excel.

Solução possível
Faça um Regex localizar / substituir em seu arquivo para alterar '\ r ([^ \ n])' em '\ n \ 1'. Isso altera todos os CRs que não são seguidos por um LF em um LF. O \ 1 é apenas para preservar o caractere final.

Final toughts
O Excel continua me surpreendendo de maneiras misteriosas sobre o quão arbitrário ele lida com arquivos de texto sem fornecer feedback para o usuário ... Então, novamente, a maioria dos usuários ficaria confusa com a noção de que arquivos de texto simples não são arquivos Excel .

Edit: script do Powershell para localizar substituir em arquivos grandes

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
Get-Content -Encoding UTF8 -ReadCount 1000 input.txt |
     Foreach-Object { 
        [System.IO.File]::AppendAllLines(
              [string]'output.txt'
            , [string[]]($_) // TODO: add regex replacement here
        ) 
    }
    
por 12.06.2018 / 16:55