9

我需要使用自定义colorpattern_fg_color十六进制:0x00adb1,RGB:0,173,177)。我遵循了这里的建议,但对我来说没有用(我在另一个基于电子表格 gem 的库中使用它):

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

测试示例:

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

我收到以下错误:

未知颜色“企业”

任何建议将不胜感激。

4

1 回答 1

6

: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
于 2015-11-02T09:45:11.703 回答