生成CSV时仅引用字符串(非数字)

时间:2015-02-18 14:33:53

标签: ruby csv

我按如下方式生成CSV数据:

require 'csv'
CSV.generate do |csv|
  csv << ['a', 123, 1.5, '0123']
end

返回此结果:

"a,123,1.5,0123\n"

问题是Excel会将0123解释为整数。另一方面,使用force_quotes: true时,值1231.5将不再被解释为数字。

如何才能引用字符串而不是数字来获得以下结果?

"\"a\",123,1.5,\"0123\"\n"

1 个答案:

答案 0 :(得分:0)

require 'csv'
test = CSV.generate do |csv|
  csv << ['a', 123, 1.5, '0123'].map{|e|e.class == String ? "\"#{e}\"" : e}
end
puts test # => """a""",123,1.5,"""0123"""

此输出是有效的CSV,并导入电子表格中:

A1: "a"
B1: 123
C1: 1.5
D1: "0123"

这是你在找什么?


编辑:

如果不是很明显,我在这里做的就是在将每个值传递给csv之前检查每个值。如果它是一个字符串,请用引号括起来(\"是转义引用)然后让CSV转义它们,但它需要才能生效。

无论您使用哪种方法将内容传递到csv对象,您都应该能够进行相同的检查并以这种方式修改字符串。

或者,如果您有权访问源数据,请在那里添加周围的引号。