将自定义颜色与Spreadsheet gem一起使用

时间:2015-10-29 14:25:09

标签: ruby-on-rails ruby excel ruby-on-rails-4 spreadsheet-gem

我需要使用自定义colorpattern_fg_color HEX :0x00adb1, RGB :0,173,177)。我正在关注here的建议,但它对我没有用(我在另一个基于Spreadsheet gem的库中使用它):

Spreadsheet::Excel::Internals::SEDOC_ROLOC.update(enterprise: 0x00adb1)
Spreadsheet::Column.singleton_class::COLORS << :enterprise

测试示例:

Spreadsheet::Format.new(pattern_fg_color: :enterprise)

我收到以下错误:

  

未知的颜色&#39;企业&#39;

任何建议都会受到重视。

1 个答案:

答案 0 :(得分:6)

似乎将现有颜色映射到另一个hex / rgb代码比添加新颜色要容易得多,因此我的解决方案意味着更改了内置:xls_color_41

第二种方法

实际上,我使用gem的原生方法Spreadsheet::Workbook#set_custom_color在没有猴子修补的情况下取得了相同的结果:

document = Spreadsheet::Workbook.new
document.set_custom_color(41, 0x00, 0xad, 0xb1) 

第一种方法:

我结束了猴子修补Spreadsheet::Excel::Writer::Workbook课程:而不是default_palette方法返回的默认Excel&#97; 97调色板,我定义了一个方法,这会将:xls_color_41的返回调色板从[0x33, 0xcc, 0xcc]更改为[0x00, 0xad, 0xb1]。结果如下:

module Spreadsheet
  module Excel
    module Writer
      class Workbook  < Spreadsheet::Writer

        alias_method :excel_palette, :default_palette

        def palette_modifier
          {
            41 => [0x00, 0xad, 0xb1]
          }
        end

       def default_palette
         excel_palette.map.with_index{|rgb, code| [code, rgb]}.to_h.update( palette_modifier ).values
       end

      end
    end
  end
end