如何用axlsx给date一个背景颜色?

我用axslx创build一个excel。 一行应该是彩色的。 但是,如果我这样做,我放松date格式的date。

我做了一些尝试的最小例子:

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 

结果是:

在这里输入图像说明

如何在不丢失数据信息的情况下着色date单元格?

您还需要指定数字格式,以便您的样式看起来像

 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] 

这将产生一个像其他行格式化的红色date和一个没有填充列B.

这种风格将只为date,所以如果你想整个列我会推荐的东西

 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和全局命名常量 NUM_FMT_PERCENTAGENUM_FMT_YYYYMMDDNUM_FMT_YYYYMMDDHHMMSS等可用的预定义样式。

当定义很多不同的格式时,我发现使用YML文件最简单,然后parsing它来定义样式

 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常量从您的自定义类和引用样式启动工作簿。