在电子表格中使用自定义颜色 gem

Use custom colors with Spreadsheet gem

我需要使用自定义 colorpattern_fg_color (HEX: 0x00adb1, RGB: 0,173,177) .我遵循了 here 的建议,但它对我没有用(我在另一个基于电子表格 gem 的库中使用它):

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

测试示例:

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

我收到以下错误:

unknown color 'enterprise'

如有任何建议,我们将不胜感激。

似乎将现有颜色映射到另一个 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 class:我定义了 default_palette 方法返回的默认 Excel '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