繁体   English   中英

使用R中的openxlsx包将样式应用于工作簿的所有图纸

[英]Applying style to all sheets of a workbook using openxlsx package in R

在R中使用openxlsx包时,我想将特定样式应用于工作簿的所有工作表。 定义样式后,我正在使用addStyle() 在这里,我需要指定需要添加样式的工作表名称或编号

addStyle(wb, sheet=1, style, rows, cols, gridExpand = FALSE, stack = FALSE)

有没有一种简单的方法可以执行此操作而无需使用任何循环或每张纸单独添加样式? 原因是页数可能每次运行都会更改

您不必为循环使用固定的数字。 如果您遍历names(wb)

for(curr_sheet in names(wb))

并将该值传递到工作sheet参数中,无论何时更改工作sheet数,该参数都将起作用。

我认为没有某种for循环/应用功能,没有一种方法可以对所有工作表使用addStyle

只是为了扩大丹尼的猜想

我认为没有某种for循环/应用功能,没有一种方法可以对所有工作表使用addStyle

和完整性的缘故-还有另外一种可能:在purrr从包tidyverse 这是一种功能编程的方法,可让您避免循环。

关于如何通过具有不同长度的openxlsx和data.frames向多个工作表添加样式的最小可复制示例:

library(purrr)
library(openxlsx)

# random data.frames
a <- data.frame(name = c("A", "B", "C"),
                value = c(0.01, 0.02, 0.03))

b <- data.frame(name = c("D", "E", "F", "G"),
                value = c(0.01, 0.02, 0.03, 0.04))

# functional programing is mainly based on lists
l <- list(a, b)

# Excel Sheets
sheet_names <- c("SheetA", "SheetB")

# Create the workbook
wb <- createWorkbook()

# Walk replaces the for-loop to create empty sheets given our variable
# sheet_names = .x
walk(sheet_names, ~addWorksheet(wb, .x))

# Walk2 takes a second parameter, in our case the list of data.frames
# sheet_names = .x
# l = .y
walk2(sheet_names, l, ~writeData(wb, .x, .y))

# To apply a certain style, i.e. percentage format, we need to know the number of rows 
# for each data.frame. Thus, walk2 helps us to circumvent a nested for-loop
# sheet_names = .x
# l = .y
walk2(sheet_names, l, ~addStyle(wb, .x, 
                                style = createStyle(numFmt='PERCENTAGE'), 
                                rows = 2:(nrow(.y)+1), cols = 2, gridExpand = TRUE))

# Save the workbook
saveWorkbook(wb, "myfile.xlsx", overwrite = T)

当然,在这么小的示例中,for循环将很容易实现,但是当要求变得更加严格并且您想提高脚本速度时,请进行purrr和函数式编程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM