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


13

如何获得Excel导入我的CSV文件?

文件

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

问题

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

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

至少对我来说,这是不好的。

示例数据

“ 20051”,“”,“ 2009 Sep 30 02:53:23”,“ SOMETEXT”,“”,“ 5000”,“ 2000000”,“ 2008-99999--999​​99、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,140 -SOMETEXT-SOMETEXT,141-SOMETEXT-SOMETEXT”
“ 20052”,“ SOMETEXT”,“ 2009 Sep 08 07:56:50”,“ SOMETEXT”,“”,“ 50000”,“ 5000000”,“ 2007-99999-99999”,“ 146-SOMETEXT-SOMETEXT,145 -SOMETEXT-SOMETEXT,147-SOMETEXT-SOMETEXT,148-SOMETEXT-SOMETEXT”,“ 103-SOMETEXT-SOMETEXT,1131-SOMETEXT-SOMETEXT”

我尝试了什么?

我已使用导入工具来指定定界符等,但这似乎无济于事。

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

我还能尝试什么?


1
哪个Excel版本?它是否已完全打补丁?
harrymc

我已经在2002年和2007年看到过这种情况。我不确定2007年如何,但是我敢肯定2002年是最新的消息
罗里·贝克尔2009年

您可以提供CSV链接吗?还是演示该问题的简化版本?
乔什·康姆利

上面添加了示例数据
罗里·贝克尔2009年

Answers:


13

我只是尝试了一次快速测试,即可复制您的问题。

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

尝试将“和”替换为“


玩完样本后,我注意到Excel不喜欢字段之间的空格

例如代替

"20051", "", "2009 Sep 30 02:53:23", ...

你要

"20051","","2009 Sep 30 02:53:23",...

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

Find:    |("[^"]*",) |
Replace: |\1|

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

或者,如果您有权访问,则只需修改.Net代码;-)

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

我遇到了ANSI编码CSV的Catch 22(未处理国际字符)和UTF编码CSV未由Excel正确处理的问题。并且在维护CSV时找不到解决方案。如果需要国际字符支持,那么XML(或本机XLS)格式似乎是唯一的选择-以简单为代价。


不涉及智能报价。生成此文件以使用.Net编写的程序中的std引号。
罗里·贝克尔

我无意说UTF-8文件应采用不同的编码方式。但是,当导入UTF-8时,确实必须告诉Excel编码是什么。而且,UTF-8隐藏在那一长串编码的下方。
Arjan

我已经导入了许多UTF-8编码的CSV文件。我注意到他们是否有BOM。
Arjan

@lumbarious:你是明星!完美运行...我不敢相信Excel
无法解决

1
是的,显然字段之间的空格完全混淆了Excel2011。删除空格可以解决此问题,也可以防止Excel将引号作为数据的一部分包括在内。我的猜测是某处有一个规范,指出双引号仅在直接与逗号相邻时才对数据进行定界。
彼得·格鲁克

9

这个问题困扰我很多年了。我刚刚发现了解决方案,并且在上面的答案中提到了该解决方案,但没有明确指出。

这是逗号后的空格!

这不会导入excel。

HEADER1, HEADER2
"1,000", "2,000"

HEADER1,HEADER2
"1,000","2,000"

作品!


3
欢迎来到超级用户!这个答案是用一种有用而清晰的方式写的。感谢您的贡献,我们希望您能坚持下去。
user1717828

AAA!与该答案不同,被接受的答案对隐藏的问题具有真正的答案。该操作不使用智能引号。
dardub


2

当我尝试打开此文件时,Excel会完全忽略引号,并假定它们是数据的一部分。因此,它将包含逗号的字段分成多列。

如果您不是意外使用智能报价(例如lumbarius 建议),并假设您使用的是Windows,则可能是由于您的区域设置所致。双击或使用文件»打开时,Excel不会询问您任何详细信息,而仅使用这些设置。

尽管如此,手动调用导入功能(就像您所做的一样)应该已经奏效,所以我怀疑更改区域设置会有所帮助...


这似乎更像是评论而不是答案……
Metafaniel

这个建议完全解决了我的问题!进行CSV导入(“数据”>“来自文本/ CSV”)没有按预期方式工作,但是如果我只是对CSV文件执行“文件”>“打开”,则可以正常工作。然后,我可以将整个表复制/粘贴到其他工作簿中。
受伤的史蒂文·琼斯(StevenJones)

1

您检查过文件的字符编码了吗?尝试将字符编码设置为UTF-8。

您可以使用notepad2更改字符编码。


Notepad2报告的编码为“带签名的UTF8”
Rory Becker,2009年

然后,在导入时,您需要在编码列表中向下滚动。UTF-8隐藏在列表中较低的位置。(无需使用UTF-8编码的CSV文件,但是由于您的输入已经 UTF-8,因此您确实需要告诉Excel使用什么。请注意,正常的引号字符将以ASCII,Western和UTF进行编码-8,但签名(字节顺序标记)或某些其他字符是否弄乱了?)
Arjan

@Peter为什么将官方链接更改为Wikipedia?那根本没有道理吗?我们不想派太多人,这当然也不需要编辑,尤其是对于一个有两年历史的帖子。
slhck 2012年

1

只需在此处添加答案即可:在CSV文件中的COMMAS之后关注空格。如果您在数据中带引号的字段,Excel将不喜欢这些。

Excel喜欢(4列数据):

a, b, c, d

但是不喜欢(3列数据):

a, "b, c", d

它确实喜欢(3列数据):

a,"b, c",d

我刚遇到这个问题。我一直把头撞在墙上,直到得到这张纸条。这简直太神奇了。我正在运行Excel 2017,但愚蠢仍然存在...
Albert Godfrind

1

我今天遇到了这个问题,也找到了对我有用的解决方案。

我的环境/上下文:我有一个网页,其中包含一些(形式)问题,其中包含双引号和逗号。问题和答案均从数据库中拉出并写入Excel文件中以进行报告。

我遇到了上述相同的问题:包含双引号和逗号的问题在Excel中被拆分为多个列。

出于我的目的,使用两个单引号代替双引号可以解决问题

->在网站上,两个单引号对网站访问者来说就像是双引号

->在Excel文件中,对于查看报告数据的用户,两个单引号再次看起来像双引号

我意识到这种解决方案并非对每个人都适用,但希望它将对某人有所帮助。


1

我能够使用以下方法执行此操作:

a,b,c,"=""(1,2,3)"""

它提供了四列:

|  a  |   b   |   c   |   (1,2,3)   |

0

另一种方法是:

  1. 在LibreOffice或OpenOffice Calc中打开文件。
  2. 设置正确的导入选项,例如UTF-8,逗号分隔,...
  3. 将文件存储为ods或xls
  4. 在Excel中打开新文件。

这样,您可以设置正确的编码(如UTF-8),如果没有BOM,许多(所有?)版本的Excel都无法正确处理该编码,您不必担心正则表达式会替换字段中的某些文本,并且你没有注意到。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.