2016-10-21 68 views
0

私はaxslxでExcelを作成します。 1つの行に色を付ける必要があります。しかし、私がそうするなら、私は自分の日付の日付形式を失う。私はいくつかの試みと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

私はそれが最も簡単なYMLファイルを使用して検索し、それを解析し、多くの異なるフォーマットを定義する場合、定義済みnumFmtsglobal named constantsNUM_FMT_PERCENTAGEを通じて利用可能なスタイル、NUM_FMT_YYYYMMDDNUM_FMT_YYYYMMDDHHMMSSなどが

もありますスタイルを定義するその後

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

追加のパラメータ 'type'とそれに類するものを探しましたが、' format_code'を検出しませんでした。ありがとう。 – knut

関連する問題