为什么Excel换行符不会转移到记事本中?


31

在Excel中复制带有换行符的单元格并将其粘贴到记事本中时,文本将粘贴到一行上。这是为什么?


2
您好,欢迎来到超级用户!尝试提供尽可能多的细节,以便您可以更详细地回答问题。前往自己的问题页面,获取方便的提示,以帮助您提出最佳问题。我使用Excel 2013和Notepad ++对此进行了测试,效果很好,但是我能够使用Windows OS附带的常规Notepad应用程序复制您描述的问题,但该应用程序无法正常工作。
angelofdev

请注意,剪贴板可以支持同一代码段的多种形式(原始文本最多包含有关其来源的大量元数据)。由接收程序确定最喜欢哪个程序。记事本不是很聪明。
托尔比约恩Ravn的安徒生

Answers:


27

这是由于电子表格的工作原理所致。假设您有一个包含数据的电子表格。如果要复制整行数据,然后将其粘贴到记事本中,则所有数据都必须在一行上。这是因为如果要复制另一行数据并将其粘贴,则下一行数据需要在一行上。如果复制的第一行中有换行符,则数据将不再位于两个线性行中。如果要将数据从“记事本”中复制出来,然后再复制回电子表格中,它将无法正确粘贴。


6
这个答案是错误的。粘贴带换行符的文本后,请尝试保存记事本。然后改为使用写字板打开文件。只是旧版本记事本中的一个错误。您应将其他答案标记为正确。
扎克

@Zak您不正确。这就是从Excel粘贴到任何简单文本编辑器中的方式。您链接的文章与错误无关,但与记事本添加了对Unix回车符和换行符的支持有关。
Keltari '18

4
@Keltari实际上,@ Zak是正确的。出于某种原因,当您在Excel中使用()使用换行符时Alt+Enter,仅输入0xA,而不输入完整的0xD 0xA,这意味着LF而不是CR/LF。Excel会对此进行解释并显示换行符,而普通记事本则不会,因为它期望CR/LF。检测到的格式差异不仅仅是错误,但这仍然是正确的原因。
ChatterOne

4
@Keltari没有什么可争辩的。使用二进制编辑器,查看文件中写的内容。
ChatterOne

1
@Keltari坦白说,这些投票主要是受到HNQ接受答案的影响。您会看到有多少人同意其他答案。
kapex 18'Dec

45

当您使用记事本时,这是正确的,记事本是Windows中已经预安装的Microsoft基本文本编辑器。

但是,您可以使用更高级的文本编辑器,例如PSPad或Notepad ++(既出色,又免费​​),并且可以将换行符传送出去。

Excel

电子表格

标记单元格,然后将其复制粘贴到Notepad ++中

记事本++

将相同的内容粘贴到记事本(Windows默认编辑器)中:

Windows记事本

请注意,在两种情况下,引号都是自动添加的!

更好的编辑器还为您提供了显示控制字符的选项,例如LineFeed(LF)和CarriageReturn(CR)。在记事本++中,它看起来像:

记事本++带控制

结论:根据需要选择工具。如果需要在编辑器中保留单元格边界,但是单元格内容可能会有所更改,请使用记事本。如果您需要保留单元格内容,包括换行符,并且单元格边界的1:1可重复性并不重要,请使用其他编辑器。

大量处理此类数据

如果同时需要单元格边界和1:1保留的单元格内容,则可能会遇到问题。

可能会有更智能的解决方案,但是在这种情况下,我要做的是用任何一种语言(VBA,Python或您最喜欢的任何一种语言)编写一个小的程序,该程序读取内容并为换行符添加占位符字符串(诸如“ ### Linebreak ###”,稍后可以用CR和LF控制字符替换。当然,这很简单,只有在必须处理大量数据时才有意义。

添加的引号也会引起问题。乍一看,即使包含换行符,这些也可能有助于保留单元格边界。但是,您的单元格可能在原始内容中使用引号,然后出现新问题。因此,有各种解决方案,但是需要您的注意。


12
Notepad ++显示CRLF那里实际上是因为它看到LF并假定它应该是完整的CRLF并进行转换。
3D1T0R 18/12/19

@ 3D1T0R我怀疑这是因为没有换行的回车会影响可读性。不过,这将是令人愉悦的空间效率。
斯蒂安·伊特维克

4
@ 3D1T0R:它取决于Notepad ++行结束设置。可以“二进制粘贴”以保留原始Excel格式,这实际上仅是LF。
托马斯·韦勒

1
这应该是公认的答案
ChatterOne

1
请注意,Windows 10版本1809下的记事本可以选择使用LF作为换行符(而不是CR-LF)。如果使用该选项,则不会进行任何转换,但换行符仍会正确显示。
Erik A

34

凯尔塔里(Keltari)的答案给出了逻辑推理,而该答案侧重于技术差异。

在计算中使用三种不同形式的换行符:

  • Unix和macOS 10.0+行尾使用换行符(LF
  • Macintosh(在macOS 10.0之前)行尾使用回车符(CR
  • Windows行尾使用回车符和换行符(CRLF)的组合

这是类型编写器工作方式的保留。

Excel使用这些换行符的组合来表示具有多行的单元格:

  • 单元格由Tab字符分隔。
  • 行用CRLF字符分隔。
  • 多行单元格仅使用LF字符分隔每一行。

当您将工作簿另存为.txt文件并使用支持显示这些字符的文本编辑器将其打开时,这一点变得显而易见。

电子表格

记事本++

记事本仅CRLF作为换行符处理,而忽略LF或单独处理CR。它们仍在文档中,但以任何方式都不可见。

注意:来回粘贴时您将看不到此内容,因为Notepad ++会自动为您调整行尾,而常规的Notepad则不会。


3
您还应该提到的LF ,粘贴到记事本中时,实际上仍然存在该记事本,而记事本根本无法显示它。(它实际上与零宽度空间相同。)因此,为什么将粘贴的数据从记事本中复制回Excel包括这些换行符(尽管Excel不会自动调整行的大小)。
3D1T0R '18

3
请注意,这仅是Excel将工作簿导出到文本文件的方式。对于xlsx文件,字符串中的换行符实际上由表示CRLF
kapex

3
有趣的是,完全有可能构建一个“真正”包含CRLF-的单元="A"&CHAR(13)&CHAR(10)&"B"。由公式产生的换行符在excel中不可见,但是如果复制然后通过“粘贴值”粘贴,则可以正常工作。手动键入"A<CRLF>B"记事本并复制粘贴的值也将保留CRLF。
Random832 '18

3
@ 3D1T0R是正确的。尝试将带有文本“ a \ nb”(其中“ \ n”代表换行符)的单个Excel单元格复制到记事本中。您将在记事本中看到“ ab”(带引号)。但是,如果将插入标记放在“ a”前面,然后按键盘上的向右箭头键三下,您会发现在“ a”和“ b”之间有一个不可见的零角字符!实际上,您还可以使用Shift键将其选中并将其复制到剪贴板!
安德里亚斯·雷布兰德

2
@AndreasRejbrand:我已经多次使用这种技术来使带有EOL的文本文件LF快速可读。即找一个LF字符,选中它,Ctrl+ CCtrl+ HomeCtrl+ FCtrl+ VEnterEscEnter。然后重复F3Enter直到结束。[编辑:<kbd>在评论中不起作用?]
3D1T0R

1

Excel使用LF表示单元格中的新行。记事本不认为这是换行符,因为Windows通常将CRLF用于换行符。

Notepad ++比相对简单的Notepad更智能,因此也将LF解释为换行符。


我不使用Notepad ++,但是出于好奇:如果您有一个包含至少两行的Excel表,该行包含多行单元格并将其复制粘贴到Notepad ++中,该怎么办?
安德烈亚斯·雷布兰德

1
@AndreasRejbrand多行单元将被包裹起来",Notepad ++将规范所有匹配的行尾。看这里。如果改为另存为.txt并在Notepad ++中打开,则多行单元格将LF只有一个。看这里
Worthwelle
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.