【问题标题】:Prawn set cell color under a condition while making a table大虾在制作表格时在条件下设置单元格颜色
【发布时间】:2020-10-30 19:52:08
【问题描述】:

我正在尝试在某个条件下更改单元格的背景颜色时生成一个表格。我已经求助于这里。这是我正在尝试做的一个示例:

        idx = 0 

        pdf.table(myTable) do
            style(row(0), :background_color => 'ff00ff')
            style(column(0))
            while idx <= totalRows
                if cells[idx,3] == "No go"
                    style(cells[idx,3], :background_color => 'fF0000')
                else 
                    style(cells[idx,3], :background_color => '00FF22')
                end 
            idx += 1 
            end 
          
        end

【问题讨论】:

  • 欢迎来到 Stack Overflow。它有效吗?如果不是,我建议您描述出什么问题?细胞会发生什么?什么错误信息?
  • undefined method `style' for nil:NilClass 是我得到的错误。尝试遍历它们时,尝试在 do 循环中单独访问一个单元格似乎不起作用。
  • 谢谢。请将 exact 错误消息粘贴到您的问题中。 Ruby 通常会在每条错误消息中给出一个行号:因为有 4 行带有“样式”,所以问题的读者如果不自己运行代码就无法判断它是哪一行。
  • 你想让这条线做什么? style(column(0))

标签: ruby prawn


【解决方案1】:

正确调用#style

在 prawn-table 0.2.2 版本中,#style 方法是在一个单元格或一个单元格数组上定义的,因此您需要先获取它。该参数只是您想要的样式的键和值的散列。例如,row(0) 是一个单元格数组,因此您可以将其设置为洋红色背景,如下所示:

  pdf.table(myTable) do        
    row(0).style(:background_color => 'ff00ff')
  end

你可以参考#style的完整源码在

column(0)

我不确定您希望style(column(0)) 行做什么,所以我无法就此提供建议。

“不行”时的条件

您似乎希望 while 循环将条件应用于第四列,以便内容为“No go”的单元格为红色,而其余为绿色。

为此,您可以使用 #style 方法内置的迭代器,而不是您的 while 循环。它可能看起来像这样:

    column(3).style do |cell|
       if cell.content == "No go"
         cell.style(:background_color => 'ff0000')
       else
         cell.style(:background_color => '00ff22')
       end
    end

如果您想要一些稍微不同的东西,您现在应该知道足以改变代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多