我按如下方式生成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
时,值123
和1.5
将不再被解释为数字。
如何才能引用字符串而不是数字来获得以下结果?
"\"a\",123,1.5,\"0123\"\n"
答案 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对象,您都应该能够进行相同的检查并以这种方式修改字符串。
或者,如果您有权访问源数据,请在那里添加周围的引号。