1

У меня есть большой файл TXT разделенный с помощью TAB .
Текст заключен в кавычки, но Excel по-прежнему разбивает значения на две строки, когда внутри инкапсулированной строки появляется символ CR.

Есть ли способ заставить Excel не разбивать строки?

1 ответ1

1

Следующий ответ частично выдвигает на первый план проблему.

Как верно указывает Дж. Эшли, существует разница между тем, как Excel обрабатывает файл CSV при двойном щелчке по сравнению с Файл-> Открыть (или Данные-> Импорт).

В дополнение к замечанию Дж. Эшли я проверил и сделал следующие выводы:

  • Когда инкапсулированные поля содержат \n (LF) или \r \n (CR-LF), они открываются правильно при двойном щелчке, но создают проблему, упомянутую OP при использовании File-> Open (или импорт)
  • Когда инкапсулированные поля содержат \r (CR), они вызывают проблему, упомянутую OP, независимо от того, что вы делаете. Использование UTF8-BOM, без Bom, двойной щелчок, Файл-> Открыть, Данные-> Импорт ... всегда одна и та же проблема.

Следовательно, кажется, нет никакого способа обойти эту проблему в Excel.

Возможное решение
Выполните поиск / замену Regex в вашем файле, чтобы заменить '\r([^\n])' на '\n\1'. Это изменяет все CR, за которыми не следует LF, в LF. \1 просто для сохранения завершающего символа.

Заключительные испытания
Excel продолжает удивлять меня таинственными способами того, как произвольно он обрабатывает плоские текстовые файлы данных без обратной связи с пользователем ... С другой стороны, большинство пользователей были бы поражены и смущены тем, что плоские текстовые файлы не являются файлами Excel.

Изменить: скрипт Powershell для поиска замены в огромных файлах

$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
        ) 
    }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .