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