使用openxlsx包addStyle及创建工作表时的控制台输出抑制问题
解决openxlsx循环操作时控制台冗余输出问题
你的问题核心在于sapply会自动将函数的返回值打印到控制台,而openxlsx的addWorksheet、writeData、addStyle这类操作会返回不必要的内容,导致控制台被填满。以下是两种简单的静默运行方案:
方案1:用invisible()包裹sapply调用
将所有sapply语句放在invisible()中,阻止返回值被打印到控制台:
library(openxlsx) set.seed(2) dat = data.frame(v1=LETTERS[1:10], v2=runif(10), v3=letters[1:10], v4=runif(10)) wb = createWorkbook() # 包裹后不会输出工作表名称 invisible(sapply(paste0("Data",1:10),function(x){addWorksheet(wb,x)})) pct = createStyle(numFmt="0%") invisible(sapply(paste0("Data",1:10),function(x){writeData(wb, x, dat)})) invisible(sapply(paste0("Data",1:10),function(x){addStyle(wb, x, style=pct, cols=c(2,4), rows=2:(nrow(dat)+1), gridExpand=TRUE)})) saveWorkbook(wb, "my_workbook.xlsx")
方案2:替换sapply为lapply
lapply功能与sapply类似,但默认不会将返回的列表打印到控制台,直接替换即可:
library(openxlsx) set.seed(2) dat = data.frame(v1=LETTERS[1:10], v2=runif(10), v3=letters[1:10], v4=runif(10)) wb = createWorkbook() # lapply不会输出任何内容 lapply(paste0("Data",1:10),function(x){addWorksheet(wb,x)}) pct = createStyle(numFmt="0%") lapply(paste0("Data",1:10),function(x){writeData(wb, x, dat)}) lapply(paste0("Data",1:10),function(x){addStyle(wb, x, style=pct, cols=c(2,4), rows=2:(nrow(dat)+1), gridExpand=TRUE)}) saveWorkbook(wb, "my_workbook.xlsx")
两种方案都能实现完全静默运行,控制台不会显示任何冗余输出。
内容的提问来源于stack exchange,提问作者Mohit
相关产品推荐
相关产品推荐

