Почему разрывы строк в Excel не переносятся в блокнот?

31

При копировании ячейки с разрывами строк в Excel и вставке ее в Блокнот текст вставляется в одну строку. Почему это?

Кайл Диксон
источник
2
Здравствуйте, добро пожаловать в суперпользователя! Постарайтесь предоставить как можно более подробную информацию, чтобы вы могли получить более подробный ответ на ваш вопрос. Зайдем задать свой вопрос странице полезных советов , которые помогут вам задать лучшие вопросы. Я проверил это в Excel 2013 и Notepad ++, и это прекрасно работает, но я смог воспроизвести описанную проблему с помощью обычного приложения Notepad, которое поставляется с ОС Windows и не работает.
angelofdev
Обратите внимание, что буфер обмена может поддерживать несколько разновидностей одного и того же фрагмента (необработанный текст с большим количеством метаданных о том, откуда он взялся). Это зависит от принимающей программы, чтобы определить, какая она нравится больше всего. Блокнот не очень умный.
Торбьерн Равн Андерсен

Ответы:

27

Это связано с характером работы электронных таблиц. Представьте, что у вас есть электронная таблица с данными. Если вам нужно скопировать всю строку данных, а затем вставить ее в Блокнот, все эти данные должны быть в одной строке. Это потому, что если вы скопируете другую строку данных и вставите ее, следующая строка данных должна быть в одной строке. Если в первой скопированной строке были разрывы строк, данные больше не будут находиться в двух линейных строках. Если вы скопируете данные из Блокнота и вернетесь в электронную таблицу, они будут вставлены неправильно.

Keltari
источник
6
Этот ответ неверен. Попробуйте сохранить блокнот после вставки текста с разрывом строки. Затем откройте файл с помощью WordPad. Просто ошибка в старых версиях блокнота . Вы должны пометить другой ответ как правильный.
Зак
@ Зак ты не прав. Так работает вставка из Excel в любой простой текстовый редактор. Статья, на которую вы ссылаетесь, не имеет ничего общего с ошибкой, но о том, что в Блокноте добавлена ​​поддержка возврата каретки Unix и перевода строки.
Келтари
4
@Keltari На самом деле нет, @Zak правильно. По какой-то причине, когда вы добавляете разрыв строки в Excel (используя Alt+Enter), вводится только 0xA, а не полный 0xD 0xA, что означает LFвместо CR/LF. Excel интерпретирует это и показывает разрыв строки, в то время как обычный блокнот этого не делает, потому что это ожидает CR/LF. Это разница в обнаружении форматов больше, чем ошибка, но, тем не менее, это правильная причина.
ChatterOne
4
@Keltari Спорить нечего. Используйте бинарный редактор и посмотрите, что написано в файле.
ChatterOne
1
@Keltari Честно говоря, эти отклики в основном являются результатом того, что они были приняты в HNQ. Вы можете видеть, как много людей согласны с другими ответами.
kapex
45

Это верно, когда вы используете Блокнот, который является основным текстовым редактором Microsoft, который уже предустановлен в Windows.

Тем не менее, вы можете использовать более продвинутый текстовый редактор, такой как PSPad или Notepad ++ (как отличный, так и бесплатный), и вы получите переносы строк.

Excel :

превосходить

Ячейка отмечена, затем скопируйте и вставьте в Notepad ++ :

блокнота ++

Тот же контент, вставленный в Блокнот (редактор Windows по умолчанию):

WindowsNotpad

Обратите внимание, что в обоих случаях кавычки были добавлены автоматически!

Лучшие редакторы также дают возможность отображать управляющие символы, такие как LineFeed (LF) и CarriageReturn (CR). В Notepad ++ это выглядит так:

Notepad ++ withcontrochars

В заключение: выберите свой инструмент в зависимости от ваших потребностей. Если вам нужно сохранить границы ячеек в редакторе, но содержимое ячеек может быть немного изменено, используйте Блокнот. Если вам нужно, чтобы содержимое ячейки оставалось нетронутым, включая разрывы строк, и воспроизводимость границ ячеек 1: 1 не имеет решающего значения, используйте другой редактор.

Массовая обработка таких данных

Если вам нужно, чтобы границы ячеек и содержимое ячеек сохранялись 1: 1 одновременно, вы можете столкнуться с проблемами.

Могут быть более разумные решения, но в таких случаях я писал небольшую программу на любом языке (VBA, Python или как вам больше нравится), который считывает содержимое и добавляет строки-заполнители для разрывов строк (что-то такое простое, как: «### Linebreak ###», который впоследствии можно заменить контрольными символами CR и LF. Конечно, тогда это сложная работа и имеет смысл, только если вам нужно обрабатывать большие объемы данных.

Вы можете столкнуться с проблемами и с добавленными кавычками. На первый взгляд это может быть полезно для сохранения границ ячеек, даже если включены разрывы строк. Однако ваша ячейка может иметь кавычки как часть исходного содержимого, и тогда у вас возникают новые проблемы. Есть несколько решений, но это требует вашего внимания.

Кристиан Гайзельманн
источник
12
Notepad ++ показывает, CRLFчто на самом деле это происходит потому, что он видит LFи предполагает, что он должен быть полным, CRLFи преобразует его.
3D1T0R
@ 3D1T0R Я подозреваю, что это связано с тем, что возврат на каретку без перевода строки может ухудшиться. Это было бы восхитительно компактно, хотя.
Стиан Иттервик
4
@ 3D1T0R: это зависит от настройки окончания строки в Notepad ++. Можно «двоично вставить», чтобы сохранить исходное форматирование Excel, которое действительно является только LF.
Томас Уэллер
1
Это должен быть принятый ответ
ChatterOne
1
Обратите внимание, что в блокноте под Windows 10 версии 1809 есть возможность использовать LF в качестве переноса строки (вместо CR-LF). Если вы используете это, преобразование не выполняется, но переносы строк по-прежнему отображаются правильно.
Эрик A
34

Keltari «s ответ дает логическое мышление, в то время как этот ответ фокусируется на технической разнице.

В вычислениях используются три различных вида разрывов строк:

  • В конце строк Unix и macOS 10.0+ используется символ перевода строки ( LF)
  • В конце строки в Macintosh (до macOS 10.0) используется символ возврата каретки ( CR)
  • В конце строки Windows используется комбинация символов возврата каретки и перевода строки ( CRLF)

Это удержание от того, как работают пишущие.

Excel использует комбинацию этих разрывов строк для представления ячеек с несколькими строками:

  • Клетки разделены Tabсимволом.
  • Строки разделены CRLFсимволами.
  • Многострочные ячейки разделяют каждую строку, используя только LFсимвол.

Это становится очевидным, когда вы сохраняете свою книгу в виде .txtфайла и открываете ее в текстовом редакторе, который поддерживает отображение этих символов.

превосходить

блокнота ++

Блокнот обрабатывает только CRLFкак новые строки и игнорирует LFили CRсамостоятельно. Они все еще находятся в документе, но никак не видны.

Примечание. Вы не увидите этого при вставке назад и вперед, потому что Notepad ++ автоматически подгоняет окончания строк, а обычный Notepad - нет.

Worthwelle
источник
3
Следует также отметить , что LF это на самом деле все еще присутствует при вставке в блокнот, записная просто не отображает его явно. (Он отображает практически то же самое, что и пробел нулевой ширины.) Поэтому копирование вставленных данных обратно из блокнота в Excel включает в себя эти разрывы строк (хотя Excel автоматически не изменяет для них размеры строк).
3D1T0R
3
Обратите внимание, что это только то, как Excel экспортирует книги в текстовые файлы. Для файлов xlsx разрывы строк внутри строки фактически представлены как CRLF.
kapex
3
Интересно, что вполне возможно построить ячейку, которая «действительно» содержит CRLF - ="A"&CHAR(13)&CHAR(10)&"B". Разрывы строк, создаваемые формулами, не отображаются в Excel, но работают нормально, если их скопировать, а затем вставить с помощью «вставки значений». Значение, вставленное при вводе вручную "A<CRLF>B"в блокноте и копировании, также сохранит CRLF.
Random832
3
@ 3D1T0R правильно. Попробуйте скопировать одну ячейку Excel с текстом «a \ nb» (где «\ n» представляет новую строку) в Блокнот. Вы увидите «ab» в блокноте (с кавычками). Но если вы поставите курсор перед «а» и трижды нажмете клавишу «стрелка вправо» на клавиатуре, вы обнаружите, что между «а» и «б» есть невидимый символ нулевой ширины! Действительно, вы также можете использовать клавишу Shift, чтобы выбрать его и скопировать в буфер обмена!
Андреас Рейбранд,
2
@AndreasRejbrand: я использовал эту технику несколько раз, чтобы LFбыстро читать текстовые файлы с EOL. т.е. Найдите LFсимвол, выберите его, Ctrl+ C, Ctrl+ Home, Ctrl+ F, Ctrl+ V, Enter, Esc, Enter. Затем неоднократно F3, Enterдо конца. [Редактировать: <kbd> не работает в комментариях?]
3D1T0R
1

Excel использует LF для обозначения новых строк в ячейке. Блокнот не считает это новой строкой, поскольку Windows обычно использует CRLF для новых строк.

Notepad ++ более интеллектуален, чем относительно простой Блокнот, и поэтому интерпретирует LF как новую строку.

Бенджамин Гудэйкр
источник
Я не использую Notepad ++, но из любопытства: что произойдет, если у вас есть таблица Excel, состоящая как минимум из двух строк, содержащих многострочную ячейку, и копирование-вставка в Notepad ++?
Андреас Рейбранд,
1
@AndreasRejbrand Многострочные ячейки будут обернуты, "и Notepad ++ нормализует все окончания строк для соответствия. Смотрите здесь . Если вы вместо этого сохраните как .txtи откроете в Notepad ++, многострочные ячейки будут иметь LFтолько. Смотрите здесь .
Worthwelle