在Excel中复制带有换行符的单元格并将其粘贴到记事本中时,文本将粘贴到一行上。这是为什么?
在Excel中复制带有换行符的单元格并将其粘贴到记事本中时,文本将粘贴到一行上。这是为什么?
Answers:
这是由于电子表格的工作原理所致。假设您有一个包含数据的电子表格。如果要复制整行数据,然后将其粘贴到记事本中,则所有数据都必须在一行上。这是因为如果要复制另一行数据并将其粘贴,则下一行数据需要在一行上。如果复制的第一行中有换行符,则数据将不再位于两个线性行中。如果要将数据从“记事本”中复制出来,然后再复制回电子表格中,它将无法正确粘贴。
Alt+Enter
,仅输入0xA,而不输入完整的0xD 0xA,这意味着LF
而不是CR/LF
。Excel会对此进行解释并显示换行符,而普通记事本则不会,因为它期望CR/LF
。检测到的格式差异不仅仅是错误,但这仍然是正确的原因。
当您使用记事本时,这是正确的,记事本是Windows中已经预安装的Microsoft基本文本编辑器。
但是,您可以使用更高级的文本编辑器,例如PSPad或Notepad ++(既出色,又免费),并且可以将换行符传送出去。
Excel:
标记单元格,然后将其复制粘贴到Notepad ++中:
将相同的内容粘贴到记事本(Windows默认编辑器)中:
请注意,在两种情况下,引号都是自动添加的!
更好的编辑器还为您提供了显示控制字符的选项,例如LineFeed(LF)和CarriageReturn(CR)。在记事本++中,它看起来像:
结论:根据需要选择工具。如果需要在编辑器中保留单元格边界,但是单元格内容可能会有所更改,请使用记事本。如果您需要保留单元格内容,包括换行符,并且单元格边界的1:1可重复性并不重要,请使用其他编辑器。
大量处理此类数据
如果同时需要单元格边界和1:1保留的单元格内容,则可能会遇到问题。
可能会有更智能的解决方案,但是在这种情况下,我要做的是用任何一种语言(VBA,Python或您最喜欢的任何一种语言)编写一个小的程序,该程序读取内容并为换行符添加占位符字符串(诸如“ ### Linebreak ###”,稍后可以用CR和LF控制字符替换。当然,这很简单,只有在必须处理大量数据时才有意义。
添加的引号也会引起问题。乍一看,即使包含换行符,这些也可能有助于保留单元格边界。但是,您的单元格可能在原始内容中使用引号,然后出现新问题。因此,有各种解决方案,但是需要您的注意。
CR
LF
那里实际上是因为它看到LF
并假定它应该是完整的CR
LF
并进行转换。
凯尔塔里(Keltari)的答案给出了逻辑推理,而该答案侧重于技术差异。
在计算中使用三种不同形式的换行符:
LF
)CR
)CRLF
)的组合这是类型编写器工作方式的保留。
Excel使用这些换行符的组合来表示具有多行的单元格:
Tab
字符分隔。CRLF
字符分隔。LF
字符分隔每一行。当您将工作簿另存为.txt
文件并使用支持显示这些字符的文本编辑器将其打开时,这一点变得显而易见。
记事本仅CRLF
作为换行符处理,而忽略LF
或单独处理CR
。它们仍在文档中,但以任何方式都不可见。
注意:来回粘贴时您将看不到此内容,因为Notepad ++会自动为您调整行尾,而常规的Notepad则不会。
LF
是,粘贴到记事本中时,实际上仍然存在该记事本,而记事本根本无法显示它。(它实际上与零宽度空间相同。)因此,为什么将粘贴的数据从记事本中复制回Excel包括这些换行符(尽管Excel不会自动调整行的大小)。
CRLF
。
="A"&CHAR(13)&CHAR(10)&"B"
。由公式产生的换行符在excel中不可见,但是如果复制然后通过“粘贴值”粘贴,则可以正常工作。手动键入"A<CRLF>B"
记事本并复制粘贴的值也将保留CRLF。
LF
快速可读。即找一个LF
字符,选中它,Ctrl
+ C
,Ctrl
+ Home
,Ctrl
+ F
,Ctrl
+ V
,Enter
,Esc
,Enter
。然后重复F3
,Enter
直到结束。[编辑:<kbd>在评论中不起作用?]
Excel使用LF表示单元格中的新行。记事本不认为这是换行符,因为Windows通常将CRLF用于换行符。
Notepad ++比相对简单的Notepad更智能,因此也将LF解释为换行符。