openxlsx записывает R-кадр данных в XLSX со ссылкой на ячейку из рабочего листа в другой
Я пытаюсь записать формулы из 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)
Обычный способ добавления формулы работает. В открытом XLSX-файле это демонстрируется в ячейке C3 рабочего листа. database
а также database space
, Но при открытии листа formula
, моя проблема представляет себя (см. скриншот 1). Ячейки A2 и B2 обе показывают #NAME?
а не ценность других листов.
Однако, когда я добавляю ссылку на ячейку вручную, она работает (см. Скриншот 2).
openxlsx
версия
> packageVersion("openxlsx")
[1] ‘4.0.17’
Как я могу решить эту проблему?
1 ответ
Проблема здесь в именах, которые передаются df2
, Решение проблемы заключается в удалении $
и заменить .
с !
,
Замена df2
в приведенном выше коде со следующими работами:
df2 <- data.frame(
formula_2 = "database!A2",
formula_3 = "'database space'!B2"
)
Строки символов теперь оцениваются как формулы и правильно ссылаются на ячейки из других листов. Я нашел решение, работая через XLConnect
R пакет, где пример в файле справки для setCellFormula-methods
включает формулу в качестве ссылки на отдельный лист.