我正在 R/Posit 中使用 openxlsx2 创建迷你图,并希望一次创建一组。 Excel 允许用户一次编辑一组迷你图,这比一次编辑多行的单个迷你图更容易。 openxlsx2 允许此功能吗? 我无法让它工作,并且可能做错了什么。
这是我试图复制的示例: 样品
这是我试图根据包文档模仿此功能的 reprex 代码:
sparklines <- c(create_sparklines("Sheet 1", "A2:L13", "M2:M13", markers = "1"))
t1 <- AirPassengers
t2 <- do.call(cbind, split(t1, cycle(t1)))
dimnames(t2) <- dimnames(.preformat.ts(t1))
wb <- wb_workbook()$
add_worksheet("Sheet 1")$
add_data(x = t2)$
add_sparklines(sparklines = sparklines)
不确定我是否理解正确,但你可以使用例如
sapply
(或 for
循环)创建迷你图向量,为了方便起见,我使用 rowcol_to_dims
,如下所示:
library(openxlsx2)
t1 <- AirPassengers
t2 <- do.call(cbind, split(t1, cycle(t1)))
dimnames(t2) <- dimnames(.preformat.ts(t1))
sparklines <- sapply(
seq_len(nrow(t2)), \(row) {
create_sparklines(
"Sheet 1",
rowcol_to_dims(row + 1, 1:12),
rowcol_to_dims(row + 1, 13),
markers = "1"
)
}
)
sparklines |> length()
#> [1] 12
wb <- wb_workbook()$
add_worksheet("Sheet 1")$
add_data(x = t2)$
add_sparklines(sparklines = sparklines)
wb$save("foo.xlsx")
您可以使用这个:
# helper function
sparkline_group <- function(sparklines) {
slg <- sparklines[1]
sl <- xml_node(sparklines[-1], "x14:sparklineGroup", "x14:sparklines", "x14:sparkline")
xml_add_child(slg, sl, level = c("x14:sparklines"))
}
在@stefan 的例子中
library(openxlsx2)
t1 <- AirPassengers
t2 <- do.call(cbind, split(t1, cycle(t1)))
dimnames(t2) <- dimnames(.preformat.ts(t1))
sparklines <- sapply(
seq_len(nrow(t2)), \(row) {
create_sparklines(
"Sheet 1",
rowcol_to_dims(row + 1, 1:12),
rowcol_to_dims(row + 1, 13),
markers = "1"
)
}
)
sparklines_grp <- sparkline_group(sparklines)
sparklines_grp |> length()
#> [1] 1
wb <- wb_workbook()$
add_worksheet("Sheet 1")$
add_data(x = t2)$
add_sparklines(sparklines = sparklines_grp)
if (interactive()) wb$open()