openxlsx:将单元格中的公式读取为字符串

openxlsx: read formula in cell as string

openxlsx::writeFormula 让我们可以将字符向量写成 Excel 公式,例如 SUM(B2:B4)。但是,该包没有 readFormula 对应项,可以让我们在从工作簿读取时将 Excel 公式作为字符向量读取,接收 SUM(B2:B4) 等字符串。我试图检查工作簿对象,但没有成功找到这些字符串。知道如何在工作簿对象中找到公式并将其转换为字符串吗?

我认为 openxlsx 没有这个选项。

但是你可以使用:

library(xlsx)

sheetname=1
xls_file = read.xlsx(file, sheetName=sheetName, header=TRUE, keepFormulas=TRUE)

输出:

> xls_file
   Project       Date Phase                       Test
1        A 2021-01-01  Init                        2*6
2        A 2021-04-10   P2O                        2*7
3        B 2021-02-01  Init                        2*6
4        B 1931-03-20   P2O       IF(1=1, TRUE, FALSE)
5        B 2021-04-01 Build                        2*6
6        B 2021-08-01   Doc                        2*7
7        C 2021-03-10  Init                        2*6
8        C 2021-03-31   P2O VLOOKUP(B9,H6:L15,2,FALSE)
9        C 2021-05-20 Build                        2*6
10       D 2021-01-30  Init                        2*7
11       D 2021-07-30   P2O                        2*6

Test 列的公式为:

Marco_CH 的另一个答案很好用,开箱即用,但使用 xlsx 包的缺点是它需要 Java。但是,我确实找到了 openxlsx:

的解决方案
readFormula <- function(wb, sheet, row, col) {
  require(dplyr)

  if (!is.numeric(sheet)) {
    sheet <- which(wb$sheet_names == sheet)
  }
  
  sheet_data <- wb[["worksheets"]][[sheet]][[".->sheet_data"]]
  cell <- ((sheet_data$cols == col) & (sheet_data$rows == row))
  formula <- 
    sheet_data$f[cell] %>% 
    stringr::str_remove("^<f>") %>% 
    stringr::str_remove("</f>$")
  
  return(formula)
}