Как отформатировать валюту в пользовательском цвете, используя axlsx в Ruby on Rails? - PullRequest
1 голос
/ 08 марта 2019

Я использую axlsx gem для создания листов Excel.

Я использовал следующий код для форматирования ячейки валюты в Excel:

wb.styles.add_style(:format_code => '[Gray][A6A6A6]$#,##0_;[Red]($#,##0_)')

Приведенный выше код работает, за исключением одного недостатка- negative currencies are rendered in red но positive currencies are NOT rendered in Gray.Почему это так?

Кроме того, я сослался на эту ссылку - https://support.office.com/en-us/article/Number-format-codes-5026BBD6-04BC-48CD-BF33-80F18B4EAE68

Приведенная выше ссылка имеет этот пункт:

To specify the color for a section in the format code, type the name of one of the following eight colors in the code and enclose the name in square brackets as shown. The color code must be the first item in the code section.
[Black] [Blue] [Cyan] [Green] [Magenta] [Red] [White] [Yellow] 
  1. Значит ли это, что яследует использовать ТОЛЬКО ОДИН из упомянутых выше цветов?
  2. Могу ли я использовать шестнадцатеричный код для визуализации пользовательского цвета - скажем, светло-серый с шестнадцатеричным кодом A6A6A6?

Пожалуйста, помогите!

1 Ответ

1 голос
/ 08 марта 2019
  1. Значит ли это, что я должен использовать ТОЛЬКО ОДИН из упомянутых выше цветов?

Если вы намерены сделать это полностью через код формата, тогда да,поскольку это единственные поддерживаемые цветовые переводы, и все остальное приведет к неверному формату.(Обычно называется «нечитаемым содержимым» в Excel)

2.Могу ли я использовать шестнадцатеричный код для отображения пользовательского цвета - скажем, светло-серый с шестнадцатеричным кодом A6A6A6?

Да, вы можете, потому что вам не нужно указывать цвет для положительных значений в format_code. Вместо этого вам просто нужно указать цвет по умолчанию в опции fg_color, например:

  wb.styles.add_style(fg_color: 'A6A6A6', format_code: '$#,##0.00_);[Red]($#,##0.00)')

Теперь цвет по умолчанию будет «A6A6A6», и если число будет отрицательным, [Красный] заменит цвет по умолчанию.

[Подразумевается] 3. Что делать, если я тоже хочу использовать разные цвета для нулей (Часть 3 на связанной странице)

Если вам нужны дополнительныефункциональность, которую вы также можете посмотреть на условное форматирование, например, так:

  zero_style = wb.styles.add(fg_color: 'FF69B4')  
  ws.add_conditional_formatting("A:A", # Indicates the cell range
      { type: :cellIs, 
        operator: :equal, 
        formula: "0", 
        dxfId:  zero_style, 
        priority: 1 
      })

Сейчас: (с учетом всего вышеперечисленного)

  • Положительные значения будут серыми (# A6A6A6) [По умолчанию]
  • Отрицательные значения будут красным ([Красный]) и отформатированы как ($ #, ## 0,00) [Код формата]
  • Точно нулевыми значениями будет Ярко-розовый (# FF69B4) [УсловныйФорматирование]
...