首页 > 解决方案 > Ruby:axlsx:如何为选定的单元格加粗并更改 BG 颜色?

问题描述

我正在使用 axlsx ruby​​ gem 创建一个 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. 想要加粗并将格力背景仅应用于州的单元格

  3. 最后是格式不匹配。

我希望我已经清楚地传达了我的问题,并提前感谢您的帮助

当前格式

当前输出

预期格式

在此处输入图像描述

标签: ruby-on-railsrubyaxlsx

解决方案


style 方法为每个单元格获取一个数组,因此如果您执行以下操作,您将有一个粗体“状态”字段,该行中的其他单元格缺少样式,除非特别添加:

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

推荐阅读