openxlsx 将 R 数据帧写入 XLSX,并将工作表中的单元格引用写入另一个
openxlsx write R dataframe to XLSX with cell reference from worksheet to another
我正在尝试将公式从 R 数据帧写入 XLSX 文件。我想使用单元格引用从一个作品 sheet 中引用另一个作品中的数据。一个作品sheet应该是"database",然后另一个sheet应该有"formula",它引用了"database" sheet中的数据].
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)
添加公式的常用方法有效。在开放式 XLSX 文件中,这在单元格 C3 的工作 sheet database
和 database space
中进行了演示。但是,当打开 worksheet formula
时,我的问题就出现了(见屏幕截图 1)。单元格 A2 和 B2 都显示 #NAME?
而不是其他作品的值 sheet。
但是,当我手动添加单元格引用时,它起作用了(见屏幕截图 2)。
openxlsx
版本
> packageVersion("openxlsx")
[1] ‘4.0.17’
我该如何解决这个问题?
这里的问题是传递给 df2
的名称。问题的解决方案是删除 $
并将 .
替换为 !
。
将上面代码中的 df2
替换为以下工作:
df2 <- data.frame(
formula_2 = "database!A2",
formula_3 = "'database space'!B2"
)
字符串现在被评估为公式并正确引用来自其他 sheet 的单元格。我通过 XLConnect
R 包找到了解决方案,其中 setCellFormula-methods
的帮助文件中的示例包含一个公式作为对单独 sheet.
的引用
我正在尝试将公式从 R 数据帧写入 XLSX 文件。我想使用单元格引用从一个作品 sheet 中引用另一个作品中的数据。一个作品sheet应该是"database",然后另一个sheet应该有"formula",它引用了"database" sheet中的数据].
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)
添加公式的常用方法有效。在开放式 XLSX 文件中,这在单元格 C3 的工作 sheet database
和 database space
中进行了演示。但是,当打开 worksheet formula
时,我的问题就出现了(见屏幕截图 1)。单元格 A2 和 B2 都显示 #NAME?
而不是其他作品的值 sheet。
但是,当我手动添加单元格引用时,它起作用了(见屏幕截图 2)。
openxlsx
版本
> packageVersion("openxlsx")
[1] ‘4.0.17’
我该如何解决这个问题?
这里的问题是传递给 df2
的名称。问题的解决方案是删除 $
并将 .
替换为 !
。
将上面代码中的 df2
替换为以下工作:
df2 <- data.frame(
formula_2 = "database!A2",
formula_3 = "'database space'!B2"
)
字符串现在被评估为公式并正确引用来自其他 sheet 的单元格。我通过 XLConnect
R 包找到了解决方案,其中 setCellFormula-methods
的帮助文件中的示例包含一个公式作为对单独 sheet.