代码之家  ›  专栏  ›  技术社区  ›  larnsce

openxlsx将R数据帧写入XLSX,并将单元格引用从工作表写入另一个工作表

  •  0
  • larnsce  · 技术社区  · 6 年前

    我正在尝试将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文件中,这在工作表的单元格C3中进行了演示 database database space .但是,打开工作表时 formula ,我的问题出现了(见截图1)。单元格A2和B2均显示 #NAME? 而不是其他工作表的价值。

    screenshot 1

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

    screenshot 2

    openxlsx 版本

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

    我如何解决这个问题?

    1 回复  |  直到 6 年前
        1
  •  0
  •   larnsce    6 年前

    这里的问题是传递给的名称 df2 。问题的解决方法是删除 $ 并更换 . 使用 !

    更换 df2型 在上述规范中,进行以下工作:

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

    字符串现在作为公式计算,并正确引用其他工作表中的单元格。我通过研究 XLConnect R包,其中帮助文件中的示例 setCellFormula-methods 包括公式作为对单独工作表的引用。