我需要写一个字符串,如" 001"作为字符串而不是数字,因此值在输出电子表格文档中显示为" 001",而不是" 1",如何使用AXLSX库?
答案 0 :(得分:4)
虽然您可以使用rjust
格式化ruby中的字符串。这对Excel文件没有帮助。在axlsx
中,您可以在添加行时指定数据类型,以便axlsx
不会尝试为您转换它,例如。
pkg = Axlsx::Package.new
wb = pkg.workbook
wb.add_worksheet do |sheet|
sheet.add_row ["001","001","001"], types: [:string,:integer,nil]
end
pkg.serialize('/test.xlsx')
这将生成一个类似于
的电子表格|001| 1| 1|
注意:第二个" 001"已转换,因为我没有指定类型,axlsx
在Cell
中使用以下方法确定它是一个数字。
def cell_type_from_value(v)
if v.is_a?(Date)
:date
elsif v.is_a?(Time)
:time
elsif v.is_a?(TrueClass) || v.is_a?(FalseClass)
:boolean
elsif v.to_s =~ /\A[+-]?\d+?\Z/ #numeric
:integer
elsif v.to_s =~ /\A[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\Z/ #float
:float
# \A(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])
# T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?
# (Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?\Z
elsif v.to_s =~/\A(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?\Z/
:iso_8601
else
:string
end
end
根据此方法的结果,然后" 施放"在您的情况下使用to_i
的值。