这是一个 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
当我在 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 中完成下游工作)。