打印双引号时避免在 paste0 中转义字符

Avoid escape characters in paste0 when printing double quotation marks

我正在编写脚本,使用 writeFormula 将公式输入 openxlsx excel sheet。对于该函数,我需要指定一个长度等于单元格数的公式向量。

这是我正在尝试做的事情:

for(i in 2:(nrow(data)+1)){formula_dep<-append(formula_dep, paste0("IFERROR(SEARCH(\"pack\",H",i,"))"))}
writeFormula(wb=file, sheet="data", x=formula_dep, startCol=9, startRow=2)

在输出中,转义字符可能被打印到 excel sheet 中,因此它被损坏了(我必须修复才能打开文件,其中列中没有任何内容它)。

在 R 中,输出是(和往常一样):

"IFERROR(SEARCH(\"pack\",H2))"

虽然转义字符在许多其他任务中不是问题,但在这个任务中,我无法完成这项工作。我不能使用单引号,因为某些未知原因 Excel 不允许在 FIND 或 SEARCH 函数中使用(可能是正则表达式问题)。请在这里帮助解决问题。

注意:我不能只在数据框本身中灌输公式(使用 R 公式),因为它应该对 excel 文件本身中的用户输入起作用。

我对 Excel 方面(在做同样的事情时更改公式)或 R 方面的解决方案持开放态度。

"\" 不存在,它只是表明 print 正在转义 ",参见:

cat("IFERROR(SEARCH(\"pack\",H2))")
# IFERROR(SEARCH("pack",H2))

这是一个工作示例:

library(openxlsx)

wb <- createWorkbook()
addWorksheet(wb, "Sheet 1")

df <- data.frame(
  a = letters[1:3],
)

writeData(wb, sheet = 1, x = df)

f <- paste0("FIND(\"b\",A", seq(nrow(df)) + 1L, ")")

f[ 1 ]
#[1] "FIND(\"b\",A2)"

cat(f[ 1 ])
# FIND("b",A2)

writeFormula(wb, sheet ="Sheet 1", x = f, startCol = 2, startRow = 2)

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