【问题标题】:Format an Excel cell from R if a cell is not blank如果单元格不为空,则从 R 格式化 Excel 单元格
【发布时间】:2019-09-04 06:32:45
【问题描述】:

我正在尝试从 R 格式化 Excel 中特定列中的单元格(使用数据框生成工作簿)。我目前正在使用openxlsx

这是我目前尝试开始工作的代码行:

conditionalFormatting(WorkBook, "Sheet1", cols=17, rows=1:11000, rule='<TODAY(),"<>"&""', style = negStyle)

我也试过这个:

conditionalFormatting(WorkBook, "Sheet1", cols=17, rows=1:11000, rule='AND(<TODAY(),"<>"&"")', style = negStyle)

conditionalFormatting(WorkBook, "Sheet1", cols=17, rows=1:11000, rule='AND(<TODAY(),<>&"")', style = negStyle)

所以如果列中的日期早于今天的日期,我会尝试使用negStyle 设置单元格的样式。我的代码有什么问题?

【问题讨论】:

    标签: r excel openxlsx


    【解决方案1】:

    您在 Excel 中的 conditionalFormatting 公式将类似于:

    因此,如果您想使用openxlsx 应用此格式,您需要这样做:

    library(openxlsx)
    
    wb <- createWorkbook()
    addWorksheet(wb, "cond")
    
    date_df <- data.frame(id = 1:20,
                          dat_col = as.Date("2019-09-20")-1:20)
    
    writeData(wb, "cond", date_df)
    
    negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE")
    conditionalFormatting(wb, "cond", cols=2, rows=2:21, rule="<TODAY()", style = negStyle)
    saveWorkbook(wb, "test.xlsx", overwrite = TRUE)
    

    然后你会得到:

    编辑

    如果您只想对非空单元格应用格式,则可以通过将rule 更新为:'AND(b2&lt;TODAY(), b2&lt;&gt;"")'

    library(openxlsx)
    
    set.seed(111)
    date_df <- data.frame(id = 1:20,
                          dat_col = as.Date("2019-09-20")-1:20)
    
    # Shuffle data frame
    date_df <- date_df[sample(nrow(date_df)), ]
    
    wb <- createWorkbook()
    addWorksheet(wb, "cond")
    
    writeData(wb, "cond", date_df[1:8,], )
    
    writeData(wb, "cond", date_df[9:10, ], startRow = 11, colNames = FALSE )
    writeData(wb, "cond", date_df[11:20,], startRow = 15, colNames = FALSE)
    
    
    negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE")
    
    conditionalFormatting(wb, "cond", cols=2, rows=2:24, rule='AND(b2<TODAY(), b2<>"")', style = negStyle)
    saveWorkbook(wb, "test.xlsx", overwrite = TRUE)
    

    【讨论】:

    • 谢谢!抱歉,我应该指定,但我的问题是某些单元格是空的。此规则不仅会正确格式化日期早于今天的单元格,而且不幸的是它还会格式化空单元格!
    • @Dieu94 刚刚更新了答案。将规则更新为:'AND(b2&lt;TODAY(), b2&lt;&gt;"")'
    • b2 指的是什么?
    • b2 指的是 Excel 单元格。所以基本上这是条件格式规则的单元格
    • 但这不是固定的吗?它如何应用到整个列?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    相关资源
    最近更新 更多