:xls_color_41
似乎将现有颜色映射到另一个 hex/rgb 代码比添加新颜色要容易得多,因此我的解决方案意味着更改了内置颜色。
第二种方法
实际上,我使用 gem 的本机方法在没有猴子修补的情况下取得了相同的结果Spreadsheet::Workbook#set_custom_color
:
document = Spreadsheet::Workbook.new
document.set_custom_color(41, 0x00, 0xad, 0xb1)
第一种方法:
我最终得到了猴子修补Spreadsheet::Excel::Writer::Workbook
类:而不是方法返回的默认 Excel '97 调色板default_palette
,我定义了一个方法,它将返回的调色板更改为:xls_color_41
from [0x33, 0xcc, 0xcc]
to [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