Ruby: axlsx: Как мне выделить и изменить цвет BG для выбранных ячеек? - PullRequest
0 голосов
/ 01 июля 2018

Я использую гем axlsx ruby ​​для создания файла Excel и не могу понять, как применить жирный и фоновый стиль только к выбранным ячейкам (здесь State Cells)

Я прошел через такие методы, как col_style и row_style и add_conditional_formatting, но не смог точно разобраться, как использовать его в моем коде или действительно ли он мне помогает здесь.

Текущая структура данных:

work = [ {:state=>"Texas", :details=>{}}
{:city=>"LasVegas", :details=>{"Rob"=>"Doctor", "Dino"=>"Artist"}}
{:city=>"El paso", :details=>{"Jer"=>"Journalist", "Milo"=>"Vet"}}

{:state=>"Florida", :details=>{}}
{:city=>"Miami", :details=>{"Jake"=>"Army", "Steve"=>"Retired"}}
{:city=>"Tampa", :details=>{"Cohen"=>"Teacher", "Mike"=>""}} ]

Фрагмент моего кода:

Только часть Excel

require 'axlsx'
p = Axlsx::Package.new

p.workbook.add_worksheet(:name => "Data") do |sheet|
    style1 = sheet.styles.add_style(:bg_color => "EF0920", :fg_color => "FFFFFF", b:true)
    style2 = sheet.styles.add_style(:bg_color => "00FF00", :fg_color => "FFFFFF", b:true)
    sheet.add_row ["State", "City", "Name", "Profession"], :style => style1
    work.each do |val|
      sheet.add_row [ val[:state], val[:city] ]
      val[:details].each do |k, v|
        sheet << ["", "",  k, v]        
      end 
     end
    sheet.add_row
end

p.serialize 'Data.xlsx
  1. Я пытался добавить пустую строку между каждым state, используя sheet.add_row, но это не работает. (для разборчивости)

  2. Хотелось выделить жирным шрифтом и применить фон gree только к ячейкам государства

  3. последнее несоответствие формата.

Надеюсь, я четко изложил свою проблему и заранее благодарю за любую помощь

Текущий формат

CUrrent output

Ожидаемый формат

enter image description here

1 Ответ

0 голосов
/ 02 июля 2018

Метод style принимает массив для каждой ячейки, поэтому, если вы сделаете следующее, у вас будет полужирное поле «State» с другими ячейками в строке, в которых отсутствуют стили, если только они не добавлены специально:

embolden_style = style.add_style(b: true,bg_color: '78F2FF')
sheet.add_row ["State", "City", "Name", "Profession"], style: [embolden_style, nil, nil, nil]
...