Excel会在CSV导出中添加额外的引号

我最近创build了一个应用程序,通过CSV添加项目到数据库。 添加项目后,我意识到,我的价值有很多额外的报价(“),这是不需要的,这是搞乱我的订单。

问题是,当从Excel中导出为CSV格式时,Excel将向我已添加引号的所有值添加多余的引号。 我已经展示了以下的区别:

原始项目: 电钻可逆1/2“6.3A

出口项目: “电钻可逆1/2”“6.3”

注意:CSV导出会添加三(3)个额外的报价单(“)”,两个报价单和一个原始报价单。

有没有可以更改的设置,或者我可以在Excel文件/列上设置的格式属性? 还是我必须忍受它,并删除我的后端代码中的这些引号,然后将它们添加到数据库?

这完全正常。 由于这是一个string,所以添加了外部引号。 内部报价是加倍逃脱它。 例如,你会在SQL查询中看到同样的东西。 使用TextFieldParser类来尝试和真正的框架代码照顾自动parsing这个。

这是标准。

CSV文件中的值应该有引号(否则字段中的逗号和换行符可能会被误解)。

如同你所看到的那样,在一个领域内逃避报价的方法是加倍。

我build议你阅读关于CSV的基本规则 :

CSV是以逗号字符分隔的字段/列和由换行符终止的logging/行的分隔数据格式。 包含特殊字符(逗号,换行符或双引号)的字段必须用双引号引起来。 如果一行包含一个空string的条目,则可能用双引号括起来。 如果某个字段的值包含双引号字符,则通过在其旁边放置另一个双引号字符来转义它。 CSV文件格式不需要特定的字符编码,字节顺序或行终止符格式。

(重点是我的)

您可以尝试从Excel导出为TAB分隔文件。 我觉得更容易parsing。

将所有字符右侧双引号replace为字符左侧双引号。 他们看起来很相似,Excel会混淆,让文本不变。

如果您的最终输出是HTML,此解决scheme将仅有帮助。 这是JavaScript的解决scheme,所以显然你需要用C#或你正在使用的语言重做这个:

 base = base.replace(/""/gi, '"'); base = base.replace(/'/gi, '''); 

在parsingCSV之前应用这个。

另一种方法是使用Unicode字符“DOUBLE PRIME”

 http://www.fileformat.info/info/unicode/char/2033/index.htm 

在您的Excel数据。 要从Excel导出为UTF-8或UTF-16 .csv文件,您必须提供一个schema.ini文件,其中包含相应的CharacterSet属性。 显然,用于将.csv导入到数据库中的工具也必须能够识别Unicode。

根据DBMS,可以使用更直接的数据传输方式(SELECT / INSERT … INTO … IN),从而完全消除.csv。