我有一个TXT
用 分隔的大文件TAB
。
文本用引号括起来,但是当封装的字符串中出现 CR 字符时,Excel 仍会将值分成两行。
有没有什么办法可以强制 Excel 不换行?
答案1
这下列答案部分凸显了这一问题。
正如 J Ashley 正确指出的那样,双击与文件->打开(或数据->导入)时 Excel 处理 CSV 文件的方式存在差异。
除了 J Ashleys 的评论之外,我还进行了测试并得出以下结论:
- 当封装字段包含 \n (LF) 或 \r\n (CR-LF) 时,只需双击即可正确打开,但在使用文件->打开(或导入)时会产生 OP 提到的问题
- 当封装字段包含 \r (CR) 时,无论您做什么,都会产生 OP 提到的问题。使用 UTF8-BOM、无 bom、双击、文件->打开、数据->导入... 总是出现相同的问题。
因此,似乎没有任何方法可以从 Excel 内部解决这个问题。
可能的解决方法
在文件中执行正则表达式查找/替换,将“\r([^\n])”更改为“\n\1”。这会将所有未跟 LF 的 CR 更改为 LF。\1 只是为了保留尾随字符。
最后的想法
Excel 总是以神秘的方式让我感到惊讶,它如何任意处理平面文本数据文件而不向用户提供反馈……不过,大多数用户会对平面文本文件的概念感到不知所措和困惑。不是 Excel 文件。
编辑:Powershell 脚本在大文件中查找替换
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
Get-Content -Encoding UTF8 -ReadCount 1000 input.txt |
Foreach-Object {
[System.IO.File]::AppendAllLines(
[string]'output.txt'
, [string[]]($_) // TODO: add regex replacement here
)
}