9

カスタム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)

そして、次のエラーが表示されます。

未知の色「エンタープライズ」

どんな提案でも大歓迎です。

4

1 に答える 1

6

既存の色を別の hex/rgb コードにマッピングすることは、新しい色を追加するよりもはるかに簡単であるように思われるため、私の解決策は組み込み:xls_color_41が変更されたことを意味します。

2 番目のアプローチ

実際、gem のネイティブ メソッドを使用して、モンキー パッチを適用せずに同じ結果を達成しましたSpreadsheet::Workbook#set_custom_color

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

最初のアプローチ:

メソッドによって返されたデフォルトの Excel '97Spreadsheet::Excel::Writer::Workbookパレットの代わりに、返されたパレットを からにdefault_palette変更するメソッドを定義しました。結果は次のとおりです。: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
于 2015-11-02T09:45:11.703 に答える