2016-10-21 22 views
0

我用axslx創建一個excel。 一行應該着色。但是如果我這樣做了,我會放棄日期的日期格式。如何用axlsx給日期一個背景顏色?

一些嘗試小例子,我做的事:

require 'axlsx' 
Axlsx::Package.new do |p| 
    p.workbook.add_worksheet(:name => "test") do |ws| 
     style1 = ws.styles.add_style(:bg_color => "EF0920", :fg_color => "FFFFFF") 
     ws.add_row [ Date.today, "No style defined --ok"] 
     ws.add_row [ Date.today, "Style with colors --The date is no date any longer"], :style => style1 
     ws.add_row [ Date.today, "Style with colors, except date -- ok, but not colored"], :style => [nil,style1] 
     ws.add_row [ Date.today, "Style with colors and types --The date is no date any longer"], :style => style1, :types => [:date,:string] 
     ws.add_row [ Date.today, "Style with colors and types --The date is no date any longer"], :style => [style1,style1], :types => [:date,:string] 
     ws.add_row [ Date.today, "No Style -- ok, but not colored"], :types => [:date,:string] 
    end 
    p.serialize('test.xlsx') 
end 

結果是:

enter image description here

我怎樣才能顏色的日期細胞,而不會丟失數據信息?

回答

1

你需要指定的數字格式,以及使你的風格看起來像

style1 = ws.styles.add_style(:bg_color => "EF0920", :fg_color => "FFFFFF", :format_code => "dd.mm.yyyy") 

當添加樣式將覆蓋默認的樣式和所有格式。例如

ws.add_row [ Date.today, "Style with colors --The date is no date any longer"], :style => [style1,nil] 

這將產生格式化像其他行的紅棗和無填充柱B.

這種風格將是迄今爲止,只有這樣,如果你想整列,我會建議像

red_style_h = {:bg_color => "EF0920", :fg_color => "FFFFFF"} 
red_date_h = red_style_h.merge(:format_code => "dd.mm.yyyy") 

red_style = ws.styles.add_style(red_style_h) 
red_date_style = ws.styles.add_style(red_date_h) 

然後風格你行作爲

ws.add_row [ Date.today, "Style with colors --The date is no date any longer"], :style => [red_date_style,red_style] 

這將產生一個紅色行(列A和B),日期格式與其他行相同。

Git Hub Source

也有通過numFmts提供預定義的樣式和global named constantsNUM_FMT_PERCENTAGENUM_FMT_YYYYMMDDNUM_FMT_YYYYMMDDHHMMSS

當定義多種不同格式的,我覺得它最容易使用的一個YML文件,然後解析定義樣式例如

red_style:&red 
    bg_color: "EF0920" 
    fg_color: "FFFFFF" 
red_date: 
    <<: *red 
    format_code: dd.mm.yyyy 

然後像

class MyStylizedSheet < ::Axlsx::Workbook 
    STYLES_FILE = YAML.load(File.read(YOUR_YML_FILE)).deep_symbolize_keys 
    PREDEFINED_STYLES = {} 
    def initialize(options={}) 
    super 
    initialize_with_styles 
    end 
    private 
    def initialize_with_styles 
    STYLES_FILE.each do |k,v| 
     PREDEFINED_STYLES[k] = @styles.add_style(v) 
    end 
    end 
end 

然後你可以從你的自定義類和參考樣式通過PREDEFINED_STYLES不斷髮起您的工作簿。

+0

我尋找額外的參數'類型'和類似的,但沒有檢測到'format_code'。謝謝。 – knut