Вам не нужен внешний пакет, mapply
может делать то, что вы хотите.
Обратите внимание, что рабочая книга "template.xlsx"
уже должна существовать.
library(openxlsx)
df <- split(data, data$x)
wb <- loadWorkbook("template.xlsx")
Теперь сложная часть.Эта функция вызывается mapply
для записи нескольких таблиц в листах с именами от "1"
до "10"
.
Функция fun
предполагает, что листы уже существуют, но не предполагает, что они пусты.Он начинается с просмотра количества таблиц на каждом листе и (если есть) (length(g) > 0
) удаляет их все.Только тогда он записывает таблицу x
с вызовом tryCatch
, обернутым вокруг writeDataTable
, чтобы отследить возможные ошибки.
Если есть ошибка, вернуть ее, если нет, вернуть строку символов "Ok"
.
fun <- function(s, x){
g <- getTables(wb, sheet = s)
if(length(g) > 0){
sapply(g, function(.g) removeTable(wb, s, .g))
}
err <- tryCatch(writeDataTable(wb, s, x),
error = function(e) e)
if(inherits(err, "error")) err else "Ok"
}
mapply(fun, names(df), df)
# 1 2 3 4 5 6 7 8 9 10
#"Ok" "Ok" "Ok" "Ok" "Ok" "Ok" "Ok" "Ok" "Ok" "Ok"
saveWorkbook(wb, "template.xlsx", overwrite = TRUE)