基于 rhandsontable 中单元格值的颜色行

Posted

技术标签:

【中文标题】基于 rhandsontable 中单元格值的颜色行【英文标题】:color row based on cell value in rhandsontable 【发布时间】:2018-01-18 00:43:45 【问题描述】:

我正在努力根据单元格值在我闪亮的应用程序中为整行 rhandsontable 着色。

在下面的例子中,我想格式化整行而不是一个单元格。

library(rhandsontable)

DF = data.frame(val = 1:10, bool = TRUE, big = LETTERS[1:10],
                small = letters[1:10],
                dt = seq(from = Sys.Date(), by = "days", length.out = 10),
                stringsAsFactors = FALSE)

col_highlight = 2
row_highlight = c(5, 7)

rhandsontable(DF, width = 550, height = 300) %>%
  hot_cols(renderer = "
               function (instance, td, row, col, prop, value, cellProperties) 
               Handsontable.renderers.TextRenderer.apply(this, arguments);

               if(value == 'F' | value == 'f') 
               td.style.background = 'pink';
                else if(value == 'J' | value == 'j') 
               td.style.background = 'lightgreen';
                else if(value == 'X' | value == 'x') 
               td.style.background = 'lightblue'

               ")

【问题讨论】:

【参考方案1】:

渲染器的思想是分别应用于所有单元格,因此单元格值不能同时是'F'和'f'。对于每一行,您必须选择第 2 列以检查值是否为“F”,并选择第 3 列以检查值是否为“f”。

rhandsontable(DF, width = 550, height = 300) %>%
hot_cols(renderer = "
           function (instance, td, row, col, prop, value, cellProperties) 
           Handsontable.renderers.TextRenderer.apply(this, arguments);

           if(instance.getData()[row][2] == 'F' | instance.getData()[row][3] == 'f')
                td.style.background = 'pink';
            else if(instance.getData()[row][2] == 'J' | instance.getData()[row][3] == 'j') 
                td.style.background = 'lightgreen';
            else if(instance.getData()[row][2] == 'X' | instance.getData()[row][3] == 'x') 
                td.style.background = 'lightblue'
           
        ")

【讨论】:

完美运行...谢谢! 对我不起作用,只是复制和粘贴上面相同的代码。使用 rhandsontable v0.3.6 @KiprasKančys,您能告诉我如何检查一个或多个单元格中的字符串长度,并在超过某个值时更新背景颜色吗? 试试这个:rhandsontable(data.frame(a = c('a' , 'ab', 'abc', 'abcd'))) %>% hot_cols(renderer = " function (instance, td, row, col, prop, value, cellProperties) Handsontable.renderers.TextRenderer.apply(this, arguments); if(instance.getData()[row][0].length > 2) td.style.background = 'pink' ")

以上是关于基于 rhandsontable 中单元格值的颜色行的主要内容,如果未能解决你的问题,请参考以下文章

Shiny and rhandsontable - 基于列总和的条件单元格/列格式

在客户端使用 afterChange 事件更改 rHandsontable 的单元格背景

使用 VBA 进行颜色填充,以单元格值为条件

根据单元格值格式化行颜色

ag网格在单元格值改变时改变单元格颜色

将单元格颜色从工作表复制到具有相同单元格值的工作表