【发布时间】: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 将此信息保存为“样式”,以便它知道在哪里应用它以及如何在需要时重用它。但是,如果需要,您可以在循环中创建样式,特别是如果您只是更改颜色,这应该相当容易。
-
是的,这就是我在我的应用程序中所做的:我列出所有颜色,创建所有样式,然后在需要的地方应用它们。如果您看到上面的第一个代码示例,它表明可以在不使用样式的情况下为文本分配颜色。所以我希望单元格背景颜色也可以。感谢您尝试提供帮助;我认为样式列表解决方案足以满足我的目的。