使用R的openxlsx包addStyle导出Excel时日期格式不一致问题
解决高亮行日期格式丢失的问题
问题根源
使用openxlsx的addStyle()时,默认参数stack = FALSE,会完全替换单元格的原有样式(包括日期格式),导致高亮行的日期格式被覆盖成常规格式,而未高亮行保留了writeDataTable写入时的原始格式。
修复方案
- 在
addStyle()中添加stack = TRUE参数,让新样式与原有样式叠加而非替换,保留日期格式 - 修正代码中样式变量名不匹配的问题(原代码里
style = highlight0、style = highlight是错误的,应对应定义好的red和yellow)
修改后的完整代码
wb <- createWorkbook() addWorksheet(wb, "quotation") writeDataTable(wb, "quotation", x = quotation) red <- createStyle(fontColour = "#000000", fgFill = "#CC2222") yellow <- createStyle(fontColour = "#000000", fgFill = "#FFFF00") # 简化行索引获取,无需转data.frame redRows <- which(quotation$note == "no") + 1 # +1是因为表头占第一行 yellowRows <- which(quotation$note == "late") + 1 # 应用样式时添加stack = TRUE保留原有格式 addStyle(wb, "quotation", cols = 1:ncol(quotation), rows = redRows, style = red, gridExpand = TRUE, stack = TRUE) addStyle(wb, "quotation", cols = 1:ncol(quotation), rows = yellowRows, style = yellow, gridExpand = TRUE, stack = TRUE) saveWorkbook(wb, "data.xlsx", overwrite = TRUE)
额外说明
which()直接返回行号,无需转成data.frame,代码更简洁stack = TRUE是核心:它会将填充样式叠加到原有单元格格式上,不会覆盖日期、数字等原有格式设置
内容的提问来源于stack exchange,提问作者vegatroz
相关产品推荐
相关产品推荐

