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? а не ценность других листов.

скриншот 1

Однако, когда я добавляю ссылку на ячейку вручную, она работает (см. Скриншот 2).

скриншот 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 включает формулу в качестве ссылки на отдельный лист.

Другие вопросы по тегам