在ruby AXLSX库中将数字写为字符串

时间:2015-06-03 12:31:04

标签: ruby

我需要写一个字符串,如" 001"作为字符串而不是数字,因此值在输出电子表格文档中显示为" 001",而不是" 1",如何使用AXLSX库?

1 个答案:

答案 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"已转换,因为我没有指定类型,axlsxCell中使用以下方法确定它是一个数字。

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的值。