在电子表格中使用自定义颜色 gem
Use custom colors with Spreadsheet gem
我需要使用自定义 color
和 pattern_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
我需要使用自定义 color
和 pattern_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