我需要将“001”这样的字符串写为字符串而不是数字,以便该值在输出电子表格文档中显示为“001”,而不是“1”。如何使用 AXLSX 库?
虽然您可以按照前面提到的使用 来格式化 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。