Excel 从“外部”CSV 的第一个字段中删除分隔符

Excel 从“外部”CSV 的第一个字段中删除分隔符

这是一个 CSV(UTF-8 BOM 编码),其中一些值用引号分隔:

AAAAA,BBBBB,CCCCC,DDDDD
"a2",b2,c2,d2
a3,"b3",c3,d3
a4,b4,"c4","d4"
a5,"this, works",c5,d5
"oh, no",b6,c6,d6

Notepad++ 中的 CSV 数据

当我在 Excel 中打开此文件并将 Windows 语言设置为丹麦语时,Excel 认为 CSV 以分号分隔,因此它会将文件作为文本打开。但为什么它会从第一列值中删除引号("a2"和周围"oh, no")?

在此处输入图片描述

这会阻止“文本到列”工作,因为逗号"oh, no"不再被转义并且剩余数据被推到一列上。

赋予文件 .txt 扩展名并以此方式打开它会产生相同的结果。

谁能解释一下这里发生了什么以及如何最好地防止它?


编辑:一个更简单的例子是这个文本:

"hello" world
hello "world"
"hello world"

Excel 将显示如下内容:

hello world
hello "world"
hello world

答案1

谁能解释一下这里发生了什么以及如何最好地防止它?

这是两个问题:-)

发生了什么:正如您所说,您的区域设置告诉 Excel 使用分号作为 CSV 的分隔符。由于没有分号,因此文件中的每一行都被视为单个值。Excel 对文字文本使用双引号,因此任何以 开头的行都"被视为带引号,并且它会删除引号。

但为什么要从第一列值中删除引号

实际上,它不是第一列,而是唯一的一列,因为没有分号。

解决方法:打开新的 Excel 工作表,转到Data/From text/SCV,然后选择您的文件。在这里,您可以定义逗号作为分隔符,然后按预期方式导入文件。

答案2

这是一个巧妙的小技巧,当您使用在其他地方创建的 CSV 文件并想要将它们无缝导入到 Excel 中时非常方便。

像您已经做的那样,使用记事本(或 notepad++)打开 .csv 文件,这样您就可以编辑其内容。

现在,在第一行,按回车键插入一个空白行。

现在输入以下内容:

sep=,

sep如分隔符,而 是,您使用的分隔符。忽略 的使用或缺失"",excell 会理解。,当然,;如果 csv 使用 , 也可以是 。

将文件保存回同一个文件或保存为新文件。

如果您现在打开新文件,Excel 可以正确打开它。

您的示例文件看起来将如下所示:

sep=,
AAAAA,BBBBB,CCCCC,DDDDD
"a2",b2,c2,d2
a3,"b3",c3,d3
a4,b4,"c4","d4"
a5,"this, works",c5,d5
"oh, no",b6,c6,d6

另外,如果您现在将新的 .csv 文件分发给其他人,他们的 excel 也会自动正确打开它。您也可以选择自己打开它,然后另存为 .xlsx 文件。这样,它还与其他编辑器兼容,例如 Open Office Calc、libre office 等...

从技术上来说,还可以创建一个脚本,自动在开头插入 sep=,,这样您就可以将该脚本发送给无法打开 .csv 文件的人。

答案3

这不是解决方案,而是另一种解决方法:使用 LibreOffice Calc 打开文件,它不会对 CSV 做出假设,但会提示用户指定分隔符和定界符。然后可以将数据保存为 .xlsx 并在 Excel 中打开(如果无法在 Calc 中完成下游工作)。

相关内容