2

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 可以将其包裹在一个函数中,这是一个改进:

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 的增强?

在我的真实案例中,我在一个列表中有 10 个数据帧的 100 个变量,每个变量都需要多个 (10) 行公式来构建一个总数。总共需要编写大约 10,000 个公式,这需要几分钟;因此,欢迎任何关于如何加快进程的想法。

注意:openxlsx 对“公式”类向量使用 writeData 的替代方法也将向量添加为列;当我尝试将向量转置为行时,公式类会丢失。

4

0 回答 0