Openxlsx2:能够在组中创建_speaklines

问题描述 投票:0回答:2

我正在 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)
r sparklines openxlsx2
2个回答
1
投票

不确定我是否理解正确,但你可以使用例如

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")

enter image description here


0
投票

您可以使用这个:

# 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()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.