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

Kyl*_*xon 32 notepad microsoft-excel linebreaks

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

Chr*_*ann 45

当您使用记事本时确实如此,记事本是 Microsoft 的基本文本编辑器,已预装在 Windows 中。

但是,您可以使用更高级的文本编辑器,例如 PSPad 或 Notepad++(优秀且免费),并且您可以转移换行符。

卓越

电子表格

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

记事本++

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

记事本

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

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

Notepad++withcontrochars

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

大量处理此类数据

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

可能有更智能的解决方案,但在这种情况下,我所做的是用任何语言(VBA、Python 或任何你最喜欢的语言)编写一个小程序来读取内容并为换行符添加占位符字符串(就像这样简单"###Linebreak###",以后可以用 CR 和 LF 控制字符重新替换。当然,这是一项繁琐的工作,只有在您必须处理大量数据时才有意义。

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

  • Notepad++ 显示 `CR` `LF` 实际上是因为它看到了 `LF` 并假设它应该是一个完整的 `CR` `LF` 并对其进行转换。 (13认同)
  • @3D1T0R:这取决于 Notepad++ 行尾设置。可以“二进制粘贴”以保留原始 Excel 格式,这确实只是一个 LF。 (4认同)

Wor*_*lle 34

Keltari回答给出了逻辑推理,而这个回答侧重于技术差异。

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

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

这是打字机工作方式的保留。

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

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

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

电子表格

记事本++

记事本仅CRLF作为换行符处理并忽略LFCR自行处理。它们仍在文档中,但不以任何方式可见。

注意:来回粘贴时你不会看到这个,因为 Notepad++ 会自动为你调整行尾,而普通的 Notepad 不会。

  • 您还应该提到`LF` * is * 在粘贴到记事本中时实际上仍然存在,记事本根本不会显示它。(它呈现的效果与零宽度空间相同。)因此,为什么将粘贴的数据从记事本复制回 Excel 中包括这些换行符(尽管 Excel 不会自动调整行大小)。 (4认同)
  • 请注意,这只是 Excel 将工作簿导出到文本文件的方式。对于 xlsx 文件,字符串中的换行符实际上由 `CRLF` 表示。 (3认同)
  • 有趣的是,完全有可能构建一个“真正”包含 CRLF 的单元格 - `="A"&CHAR(13)&CHAR(10)&"B"`。公式产生的换行符在 excel 中不可见,但如果通过“粘贴值”复制然后粘贴,则可以正常工作。通过在记事本和复制中手动键入“A<CRLF>B”而粘贴的值也将保留 CRLF。 (3认同)
  • @3D1T0R 是对的。尝试将带有文本“a\nb”(其中“\n”代表换行符)的单个 Excel 单元格复制到记事本中。您将在记事本中看到“ab”(带引号)。但是如果你把插入符号放在“a”前面,然后按键盘上的右箭头键三下,你会发现“a”和“b”之间有一个不可见的零宽度字符!事实上,您也可以使用 Shift 键选择它并将其复制到剪贴板! (3认同)
  • @AndreasRejbrand:我多次使用这种技术来使带有“LF”EOL 的文本文件快速可读。即找到一个`LF`字符,选中它,`Ctrl`+`C`,`Ctrl`+`Home`,`Ctrl`+`F`,`Ctrl`+`V`,`Enter`,`Esc` ,`进入`。然后重复`F3`,`Enter`直到结束。[编辑:<kbd> 在评论中不起作用?] (2认同)

Kel*_*ari 27

这是由于电子表格工作方式的性质。想象一下,您有一个充满数据的电子表格。如果您要复制一整行数据,然后将其粘贴到记事本中,则所有这些数据都需要在一行上。这是因为如果您要复制另一行数据并粘贴它,则下一行数据需要在一行上。如果您复制的第一行中有换行符,则数据将不再是两个线性行。如果您将数据从记事本中复制出来并重新复制到电子表格中,它将无法正确粘贴。

  • 这个答案是错误的。粘贴带有换行符的文本后,尝试保存记事本。然后用写字板打开文件。只是[旧版本记事本中的错误](https://blogs.msdn.microsoft.com/commandline/2018/05/08/extended-eol-in-notepad/)。您应该将 [other answer](https://superuser.com/a/1385717/75800) 标记为正确。 (6认同)
  • @Keltari 实际上不,@Zak 是正确的。出于某种原因,当您在 Excel 中添加换行符(使用“Alt+Enter”)时,只会输入 0xA,而不是完整的 0xD 0xA,这意味着“LF”,而不是“CR/LF”。Excel 会对此进行解释并显示换行符,而普通记事本则不会,因为它需要“CR/LF”。检测到的格式差异不仅仅是错误,但仍然是正确的原因。 (4认同)
  • @Keltari 没有什么可争论的。使用二进制编辑器并查看文件中写入的内容。 (4认同)

归档时间:

查看次数:

8979 次

最近记录:

6 年,9 月 前