openxlsx::writeFormula rowwise -有没有一种有效的方法来做到这一点?

pftdvrlh  于 2023-06-03  发布在  其他
关注(0)|答案(1)|浏览(230)

openxlsx写公式的函数似乎只能按列添加公式。
有没有一种有效的方法来写公式行?
通过一个可重复的示例来说明这个问题:

df <- data.frame(a = 1:3,
                 b = 4:6,
                 c = 7:9)

# create workbook, worksheet and write data to worksheet
wb <- createWorkbook()
addWorksheet(wb, "Sheet 1")
writeData(wb, "Sheet 1", x = df)

#  formula to be added rowwise to cells A5:C5
f <- c("SUM(A2:A4)", "SUM(B2:B4)", "SUM(C2:C4)")

# Using the openxlsx function results in columnwise addition of the formula vector: 
writeFormula(wb, sheet = 1, x = f, startCol = 1, startRow = 5)

saveWorkbook(wb, "rowwise_writeFormula.xlsx", overwrite = TRUE)

这导致:

writeFormula

简单的方法是单独添加每个公式,对于小数据集可能是可以的。

writeFormula(wb, sheet = 1, x = "SUM(A2:A4)", startCol = 1, startRow = 5)
writeFormula(wb, sheet = 1, x = "SUM(B2:B4)", startCol = 2, startRow = 5)
writeFormula(wb, sheet = 1, x = "SUM(B2:B4)", startCol = 3, startRow = 5)

这提供了我想要的,但对于数百个列不是一个可行的方法。
使用purrr::pwalk可以将其 Package 在一个函数中,这是一个改进:

formula_inputs <- list(formula = f,
                       start_col = 1:3,
                       start_row = rep(5, 3))

purrr::pwalk(formula_inputs, function(formula, start_col, start_row) writeFormula(wb, sheet = 1, x = formula, startCol = start_col, startRow = start_row))

无论哪种方式,这都是必需的:

我的问题是:有更好的方法吗?或者是对openxlsx的增强?
在我的真实的情况中,我有100个变量,用于列表中的10个 Dataframe ,每个 Dataframe 需要多个(10个)行式公式来构建总计。总共需要写大约10,000个公式,这需要几分钟的时间;因此,任何关于如何加快这一进程的想法都将受到欢迎。
注意:openxlsx的另一种方法使用writeData作为类'formula'的向量,也将向量添加为列;当我尝试将向量转置到行中时,公式类丢失。

whlutmcx

whlutmcx1#

我发现一个for循环在这里非常有用:

for(c in 1:3){
      writeFormula(wb, 1, f[c], startCol = c, startRow = 5)
}

相关问题