Dlaczego podział wiersza programu Excel nie jest przenoszony do Notatnika?

31

Podczas kopiowania komórki z podziałami linii w programie Excel i wklejania jej do Notatnika tekst jest wklejany do jednej linii. Dlaczego?

Kyle Dixon
źródło
2
Witaj superuser! Podaj jak najwięcej szczegółów, aby uzyskać bardziej szczegółową odpowiedź na swoje pytanie. Udaj się na stronę z własnymi pytaniami, aby uzyskać przydatne porady, które pomogą Ci zadać najlepsze pytania. Przetestowałem to w programie Excel 2013 i Notepad ++ i działa to dobrze, ale udało mi się replikować opisany problem ze zwykłą aplikacją Notepad, która jest dostarczana z systemem operacyjnym Windows i która nie działa.
angelofdev
Pamiętaj, że schowek może obsługiwać wiele odmian tego samego fragmentu kodu (nieprzetworzony tekst do wielu metadanych o tym, skąd pochodzi). Od programu odbierającego zależy, który z nich najbardziej lubi. Notatnik nie jest zbyt inteligentny.
Thorbjørn Ravn Andersen

Odpowiedzi:

27

Wynika to z charakteru działania arkuszy kalkulacyjnych. Wyobraź sobie, że masz arkusz danych pełen danych. Jeśli chcesz skopiować cały wiersz danych, a następnie wklej go do Notatnika, wszystkie te dane muszą znajdować się w jednym wierszu. Wynika to z faktu, że jeśli skopiujesz kolejny wiersz danych i wkleisz go, następny wiersz danych musi znajdować się w jednym wierszu. Gdyby w pierwszym skopiowanym wierszu były podziały wiersza, dane nie byłyby już w dwóch wierszach liniowych. Jeśli skopiujesz dane z Notatnika i wrócisz do arkusza kalkulacyjnego, nie wklei się ono poprawnie.

Keltari
źródło
6
Ta odpowiedź jest zła. Spróbuj zapisać notatnik po wklejeniu tekstu z podziałem wiersza. Następnie otwórz plik za pomocą WordPada. Po prostu błąd w starych wersjach notatnika . Powinieneś zaznaczyć drugą odpowiedź jako poprawną.
Zak.
@Zak jesteś w błędzie. Tak działa wklejanie z Excela do dowolnego prostego edytora tekstu. Artykuł, który podłączyłeś, nie ma nic wspólnego z błędem, ale dotyczy dodawania przez Notatnik obsługi powrotu karetki i znaków wiersza w systemie Unix.
Keltari,
4
@Keltari Właściwie nie, @Zak ma rację. Z jakiegoś powodu, gdy dodajesz podział wiersza w programie Excel (używając Alt+Enter), wprowadzana jest tylko wartość 0xA, a nie pełna 0xD 0xA, co oznacza LFzamiast CR/LF. Excel interpretuje to i pokazuje podział linii, podczas gdy zwykły notatnik tego nie robi, ponieważ oczekuje CR/LF. Różnica w wykrywaniu formatów to więcej niż błąd, ale nadal jest to właściwy powód.
ChatterOne,
4
@Keltari Nie ma się z czym kłócić. Użyj edytora binarnego i zobacz, co jest zapisane w pliku.
ChatterOne,
1
@Keltari Szczerze mówiąc, te pozytywne głosy są głównie efektem bycia zaakceptowaną odpowiedzią na HNQ. Możesz zobaczyć, o ile więcej osób zgadza się z innymi odpowiedziami.
kapex,
45

Dzieje się tak, gdy używasz Notatnika, który jest podstawowym edytorem tekstowym firmy Microsoft, który jest już wstępnie zainstalowany w systemie Windows.

Możesz jednak użyć bardziej zaawansowanego edytora tekstu, takiego jak PSPad lub Notepad ++ (zarówno doskonały, jak i darmowy), a otrzymasz przeniesienie podziałów linii.

Excel :

Przewyższać

Komórka zaznaczona, a następnie skopiuj-wklej do Notepad ++ :

Notepad ++

Ta sama treść wklejona do Notatnika (domyślny edytor Windows):

WindowsNotpad

Pamiętaj, że w obu przypadkach znaki cudzysłowu były dodawane automatycznie!

Lepsze edytory dają również opcję wyświetlania znaków kontrolnych, takich jak LineFeed (LF) i CarriageReturn (CR). W Notepad ++ wygląda to następująco:

Notepad ++ z kontrocharami

Podsumowując: wybierz swoje narzędzie w zależności od potrzeb. Jeśli potrzebujesz zachować granice komórek w edytorze, ale zawartość komórki może być nieco zmieniona, użyj Notatnika. Jeśli potrzebujesz pozostawić nietkniętą zawartość komórki, w tym podział linii, a odtwarzalność granic komórek 1: 1 nie jest kluczowa, użyj innego edytora.

Masowe przetwarzanie takich danych

Jeśli potrzebujesz jednocześnie zachować obramowanie komórki i zawartość komórki 1: 1, możesz napotkać problemy.

Mogą istnieć bardziej inteligentne rozwiązania, ale to, co zrobiłem w takich przypadkach, to napisanie małego programu w dowolnym języku (VBA, Python lub cokolwiek lubisz najbardziej), który czyta zawartość i dodaje ciągi znaków zastępczych dla podziałów linii (coś tak prostego jak „### Linebreak ###”, który można później zastąpić znakami kontrolnymi CR i LF. Oczywiście jest to wtedy kłopotliwe i ma sens tylko wtedy, gdy trzeba przetwarzać duże ilości danych.

Mogą wystąpić problemy również z dodanymi znakami cudzysłowu. Na pierwszy rzut oka mogą one być przydatne do zachowania granic komórek, nawet jeśli uwzględnione są podziały linii. Jednak komórka może zawierać cudzysłowy jako część oryginalnej treści, a następnie pojawiają się nowe problemy. Istnieją różne rozwiązania tego problemu, ale wymaga ono uwagi.

Christian Geiselmann
źródło
12
Notepad ++ pokazuje, CRLFże tak jest, ponieważ widzi LFi zakłada, że ​​powinien być pełny CRLFi konwertuje go.
3D1T0R,
@ 3D1T0R Podejrzewam, że to dlatego, że powrót karetki bez przesunięcia wiersza pogorszy czytelność. Byłoby to cudownie oszczędne miejsce.
Stian Yttervik
4
@ 3D1T0R: zależy to od ustawienia zakończenia linii Notepad ++. Możliwe jest „wklejenie binarne”, aby zachować oryginalne formatowanie Excela, które w rzeczywistości jest tylko LF.
Thomas Weller,
1
To powinna być zaakceptowana odpowiedź
ChatterOne
1
Należy pamiętać, że Notatnik w systemie Windows 10 w wersji 1809 ma opcję użycia LF jako podziału linii (zamiast CR-LF). Jeśli go użyjesz, nie ma konwersji, ale podział wiersza jest nadal wyświetlany poprawnie.
Erik A
34

Keltari „s odpowiedź daje logicznego rozumowania, a odpowiedź ta skupia się na różnicy technicznej.

Istnieją trzy różne formy podziału linii stosowane w komputerach:

  • Zakończenia linii w systemach Unix i macOS 10.0+ używają znaku przesunięcia wiersza ( LF)
  • Na końcach linii Macintosha (wcześniejszych niż macOS 10.0) używa się znaku powrotu karetki ( CR)
  • Zakończenia linii w systemie Windows używają kombinacji znaków powrotu karetki i przejścia do nowego wiersza ( CRLF)

Jest to przeszkoda w sposobie, w jaki pracują pisarze typów.

Excel używa kombinacji tych podziałów linii do reprezentowania komórek z wieloma liniami:

  • Komórki są oddzielone Tabznakiem.
  • Rzędy są oddzielone CRLFznakami.
  • Komórki wielowierszowe oddzielają każdą linię tylko za pomocą LFznaku.

Staje się to widoczne, gdy zapiszesz skoroszyt jako .txtplik i otworzysz go za pomocą edytora tekstu, który obsługuje wyświetlanie tych znaków.

Przewyższać

Notepad ++

Notatnik przetwarza tylko CRLFjako nowe wiersze i ignoruje LFlub CRsamodzielnie. Nadal są w dokumencie, ale nie są w żaden sposób widoczne.

Uwaga: Nie zobaczysz tego podczas wklejania tam i z powrotem, ponieważ Notepad ++ automatycznie dostosowuje dla Ciebie zakończenia linii, podczas gdy zwykły Notatnik tego nie robi.

Worthwelle
źródło
3
Należy również wspomnieć, że LF jest on nadal obecny po wklejeniu w notatniku, notatnik po prostu nie wyświetla go w widoczny sposób. (Renderuje efektywnie to samo, co przestrzeń o zerowej szerokości.) Dlatego kopiowanie wklejonych danych z notatnika do Excela obejmuje te podziały wierszy (chociaż Excel nie zmienia automatycznie rozmiarów wierszy).
3D1T0R,
3
Pamiętaj, że tylko w ten sposób Excel eksportuje skoroszyty do plików tekstowych. W przypadku plików xlsx podział wiersza w ciągu jest faktycznie reprezentowany przez CRLF.
kapex
3
Co ciekawe, jest całkowicie możliwe zbudowanie komórki, która „naprawdę” zawiera CRLF - ="A"&CHAR(13)&CHAR(10)&"B". Podziały linii tworzone przez formuły nie są widoczne w programie Excel, ale działają dobrze, jeśli zostaną skopiowane, a następnie wklejone za pomocą „wartości wklejania”. Wartość wklejona podczas ręcznego pisania "A<CRLF>B"w notatniku i kopiowania zachowa również CRLF.
Random832,
3
@ 3D1T0R ma rację. Spróbuj skopiować pojedynczą komórkę programu Excel z tekstem „a \ nb” (gdzie „\ n” oznacza nowy wiersz) do Notatnika. Zobaczysz „ab” w Notatniku (ze znakami cudzysłowu). Ale jeśli umieścisz kursor przed „a” i naciśniesz trzy razy klawisz strzałki w prawo na klawiaturze, zobaczysz, że pomiędzy „a” i „b” jest niewidoczny znak zerowej szerokości! Rzeczywiście, możesz także użyć klawisza Shift, aby go zaznaczyć i skopiować do schowka!
Andreas Rejbrand,
2
@AndreasRejbrand: Użyłem tej techniki wiele razy, aby LFszybko odczytać pliki tekstowe z EOL-em. tj Znajdź LFznak, wybierz go, Ctrl+ C, Ctrl+ Home, Ctrl+ F, Ctrl+ V, Enter, Esc, Enter. Potem wielokrotnie F3, Enteraż do końca. [Edycja: <kbd> nie działa w komentarzach?]
3D1T0R
1

Excel używa LF do oznaczania nowych linii w komórce. Notatnik nie uważa tego za nową linię, ponieważ Windows ogólnie używa CRLF do nowych linii.

Notepad ++ jest bardziej inteligentny niż stosunkowo prosty Notepad i dlatego interpretuje LF jako nową linię.

Benjamin Goodacre
źródło
Nie używam Notepad ++, ale z ciekawości: co się stanie, jeśli masz tabelę Excel składającą się z co najmniej dwóch wierszy zawierających komórkę wielowierszową i skopiuj ją-wklej do Notepad ++?
Andreas Rejbrand,
1
@AndreasRejbrand Komórki wielowierszowe zostaną zawinięte, "a Notepad ++ znormalizuje wszystkie pasujące zakończenia linii. Zobacz tutaj . Jeśli zamiast tego zapiszesz jako .txti otworzysz w Notepad ++, komórki wielowierszowe będą miały LFtylko. Zobacz tutaj .
Worthwelle,