【问题标题】:Axlsx gem: is it possible to apply a background color to individual cells?Axlsx gem:是否可以将背景颜色应用于单个单元格?
【发布时间】:2014-09-05 19:40:14
【问题描述】:

可以将字体颜色应用于单个单元格,而无需创建样式:

Axlsx::Package.new do |p|
  p.workbook.add_worksheet(:name => "test") do |ws|        
    ws.add_row ["a", "b", "c"]
    ws.add_row ["d", "e", "f"]
    ws.add_row ["g", "h", "i"]

    ws.rows.each do |r|
        r.cells.each do |c|
            c.color = "009900"
            if ['a', 'e', 'i'].include?(c.value)
              c.color = "009900" // how can I do the same for background color?
            end
        end
    end
  end
  p.serialize('test.xlsx')
end

可以将样式应用于单个单元格:

Axlsx::Package.new do |p|
 p.workbook.add_worksheet(:name => "test") do |ws|
    style1 = ws.styles.add_style( :bg_color => "FFFFFF00")
    ws.add_row ["a", "b", "c"]
    ws.add_row ["d", "e", "f"]
    ws.add_row ["g", "h", "i"]

    ws.rows.each do |r|
        r.cells.each do |c|       
            if ['a', 'e', 'i'].include?(c.value)
              c.style = style1
            end
        end
    end
  end
  p.serialize('test.xlsx')
end

但在我的情况下,这是不切实际的,因为我希望单元格背景是单元格值的函数,并且希望避免构建数百或数千种样式。

有什么建议吗?

【问题讨论】:

  • 看看conditional formatting这种东西我一直用它。
  • 谢谢,这让我可以根据单元格值应用差异样式。我要问的是:如何在不为每种颜色创建样式的情况下将独特的背景颜色应用于单元格?
  • 你不能。如果您在 excel 中执行此操作,您是否不必在 GUI 中指定每个“样式”?是的,使用提供的界面似乎更容易,但背景概念是相同的 Excel 将此信息保存为“样式”,以便它知道在哪里应用它以及如何在需要时重用它。但是,如果需要,您可以在循环中创建样式,特别是如果您只是更改颜色,这应该相当容易。
  • 是的,这就是我在我的应用程序中所做的:我列出所有颜色,创建所有样式,然后在需要的地方应用它们。如果您看到上面的第一个代码示例,它表明可以在不使用样式的情况下为文本分配颜色。所以我希望单元格背景颜色也可以。感谢您尝试提供帮助;我认为样式列表解决方案足以满足我的目的。

标签: ruby axlsx


【解决方案1】:

我会在一个代码块中回答您的两个问题,为特定单元格添加样式并为单元格添加背景颜色,您可以这样做:

Axlsx::Package.new do |p|
    p.workbook.add_worksheet(:name => "test") do |ws|
        style1 = ws.styles.add_style(:bg_color => "EF0920", :fg_color => "FFFFFF")
        ws.add_row ["a", "b", "c"], :style => style1
        ws.add_row ["d", "e", "f"], :bg_color 
    end
    p.serialize('test.xlsx')
end

注意: bg_color 是背景颜色 fg_color 是前景色(文本颜色)。

【讨论】:

    【解决方案2】:

    您可以在更改模式下为您的行和单元格添加样式,在这种模式下,您将准备好包含所需行的工作表。这种方式可能过于静态,您必须对所有行和单元格详细信息进行硬编码。

    package = Axlsx::Package.new
    package.workbook.add_worksheet(name: 'Worksheet') do |sheet|
        # after adding required rows
        style1 = sheet.styles.add_style(:bg_color => "EF0920", :fg_color => "FFFFFF")
        sheet.rows[6].cells[1].style = style1
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 2022-12-12
      • 2018-06-12
      • 1970-01-01
      • 2019-09-30
      • 2014-10-08
      • 1970-01-01
      相关资源
      最近更新 更多