2015-06-03 69 views

回答

3

儘管您可以使用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') 

這將產生一個電子表格,看起來像

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

+0

謝謝!有效。 – mizubasho

相關問題