openxlsx将R数据帧写入XLSX,从工作表到另一个

时间:2018-05-03 19:57:41

标签: r excel dataframe excel-formula openxlsx

我正在尝试将R数据帧中的公式写入XLSX文件。我想使用单元格引用从另一个工作表中引用数据。一个工作表被认为是一个"数据库"然后另一张纸应该有"公式"它引用了来自"数据库的数据"片材。

R代码:

require(openxlsx)

# create workbook ---------------------------------------------------------

wb <- createWorkbook()

# add worksheets ----------------------------------------------------------

addWorksheet(wb, "database")
addWorksheet(wb, "database space")
addWorksheet(wb, "reference")

# make database -----------------------------------------------------------

df1 <- data.frame(
    a = 1,
    b = 2,
    formula_1 = "A2 + B2"
)

## change class to formula
class(df1$formula_1) <- c(class(df1$formula_1), "formula")

# prepare formula ---------------------------------------------------------

df2 <- data.frame(
    formula_2 = "$database.A2",
    formula_3 = "$'database space'.B2"
)

# change class to formula
class(df2$formula_2) <- c(class(df2$formula_2), "formula")
class(df2$formula_3) <- c(class(df2$formula_3), "formula")

# write to XLSX file ------------------------------------------------------

writeData(wb, sheet = "database", x = df1)
writeData(wb, sheet = "database space", x = df1)
writeData(wb, sheet = "reference", x = df2)

# open XLSX file ----------------------------------------------------------

openXL(wb)

添加公式的常用方法有效。在openend XLSX文件中,这在工作表databasedatabase space的单元格C3中进行了演示。但是,在打开工作表formula时,我的问题就出现了(见截图1)。单元格A2和B2都显示#NAME?,而不是其他工作表的值。

screenshot 1

但是,当我手动添加单元格引用时,它可以正常工作(参见屏幕截图2)。

screenshot 2

openxlsx版本

> packageVersion("openxlsx")
[1] ‘4.0.17’

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

此处的问题是传递给df2的名称。该问题的解决方案是删除$并将.替换为!

使用以下作品替换上面代码中的df2

df2 <- data.frame(
    formula_2 = "database!A2",
    formula_3 = "'database space'!B2"
)

现在,字符串被评估为公式,并正确引用其他工作表中的单元格。我通过XLConnect R包找到了解决方案,其中setCellFormula-methods帮助文件中的示例包含一个公式作为对单独工作表的引用。