如何让 Excel 在某些内容字段中导入带有逗号的 CSV 文件?

Ror*_*ker 14 import csv microsoft-excel

如何让 Excel 导入我的CSV文件?

文件

我有一个声称是 CSV 的文件。它包含 10 个字段,所有字段都用双引号括起来(是的,甚至是日期和数字)。其中 2 或 3 个字段包含逗号。但是这些字段中的数据也被引号包围。

问题

当我尝试打开此文件时,Excel 完全忽略引号并假定它们是数据的一部分。

因此,它将包含逗号的字段拆分为多列。

这很糟糕,至少对我来说是这样。

示例数据

"20051", "", "2009 Sep 30 02:53:23", "SOMETEXT", "", "5000", "2000000", "2008 - 99999 - -99999, 2008 - unk - unk", "191 - SOMETEXT - SOMETEXT, 192 - SOMETEXT - SOMETEXT, 193 - SOMETEXT - SOMETEXT, 194 - SOMETEXT - SOMETEXT, 195 - SOMETEXT - SOMETEXT, 196 - SOMETEXT - SOMETEXT", "45 - SOMETEXT - SOMETEXT, 1162 - SOMETEXT, SOMETEXT - SOMETEXT - SOMETEXT - SOMETEXT - SOMETEXT, 141 - SOMETEXT - SOMETEXT"
"20052", "SOMETEXT", "2009 Sep 08 07:56:50", "SOMETEXT", "", "50000", "5000000", "2007 - 99999 - 99999", "146 - SOMETEXT - SOMETEXT, 144 - SOMETEXT - SOMETEXT, 147 - SOMETEXT - SOMETEXT, 148 - SOMETEXT - SOMETEXT", "103 - SOMETEXT - SOMETEXT, 1131 - SOMETEXT - SOMETEXT"

我尝试了什么?

我已经使用导入工具来指定分隔符等,但这似乎没有帮助。

我曾尝试将“文本分隔符”从双引号切换为“{none}”,然后再返回。这似乎只影响第一列。如果可以单击其他列并将此设置应用于每一列,这将是合理的。但事实并非如此,这似乎旨在跨列工作。

我还能尝试什么?

小智 15

我刚刚尝试了一个快速测试来复制您的问题。

我在 Word(使用智能引号)中创建了一个 1 行 CSV 作为 test.csv “123”,“4,5,6”,并按照您的描述在 Excel 中打开。

尝试将“和”替换为“


玩过您的示例后,我注意到 Excel 不喜欢字段之间的空格

例如代替

"20051", "", "2009 Sep 30 02:53:23", ...
Run Code Online (Sandbox Code Playgroud)

你要

"20051","","2009 Sep 30 02:53:23",...
Run Code Online (Sandbox Code Playgroud)

一个体面的正则表达式替换应该能够处理它

Find:    |("[^"]*",) |
Replace: |\1|
Run Code Online (Sandbox Code Playgroud)

(管道字符仅用于视觉提示)

或者,如果您可以访问它,只需修改 .Net 代码;-)

此外,正如 Arjan指出的,您可能还需要将文件从 UTF-8 转换为 ANSI,以防止单元格 A1 包含 BOM 及其周围的 qoutes。

我遇到了 ANSI 编码的 CSV 的 Catch 22 没有处理国际字符和 UTF 编码的 CSV 没有被 Excel 处理;并且在维护 CSV 时没有找到解决方案。如果需要国际字符支持,XML(或原生 XLS)格式似乎是唯一的方法——以简单为代价。

  • 是的,显然字段之间的空格完全混淆了 Excel 2011。删除空格可以纠正该问题,并且还可以防止 Excel 将引号包含为数据的一部分。我的猜测是某个地方有一个规范,规定双引号仅在与逗号直接相邻的情况下分隔数据。 (3认同)

小智 13

这个问题多年来一直困扰着我。我刚刚发现了解决方案,上面的答案中提到了它,但没有明确说明。

是逗号后面的空格!

这不会导入到 excel 中;

HEADER1, HEADER2
"1,000", "2,000"
Run Code Online (Sandbox Code Playgroud)

尽管

HEADER1,HEADER2
"1,000","2,000"
Run Code Online (Sandbox Code Playgroud)

作品!