在 ruby​​ AXLSX 库中将数字写入字符串

miz*_*sho 3 ruby

我需要将“001”这样的字符串写为字符串而不是数字,以便该值在输出电子表格文档中显示为“001”,而不是“1”。如何使用 AXLSX 库?

eng*_*nky 7

虽然您可以按照前面提到的使用 来格式化 ruby​​ 中的字符串rjust。这对 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')
Run Code Online (Sandbox Code Playgroud)

这将生成一个电子表格,如下所示

|001|  1|  1|
Run Code Online (Sandbox Code Playgroud)

注意:第三个“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
Run Code Online (Sandbox Code Playgroud)

根据此方法的结果,它会“转换”您的情况中使用的值to_i