将数据从R导出到Excel:公式不会重新计算

时间:2013-12-18 13:07:52

标签: r excel

R(3.0.2)/ MSOffice 2013 / Win7

假设我们有一个包含两张表的现有data.xlsx文件 - "数据"和"计算"。

"数据"表格通过R填充:

require(XLConnect)
df <- data.frame(c(1,2,3,4,5), c(2,3,4,5,6))
wb <- loadWorkbook("data.xlsx", create=F)
setStyleAction(wb, type=XLC$"STYLE_ACTION.NONE")
writeWorksheet(wb, data=df, sheet="data", startRow=1, startCol=1, header=F)
saveWorkbook(wb)

所以这就出现了问题 - 我有&#34;计算&#34;表格引用&#34;数据&#34;表格与公式。由于某些原因,即使公式引用刚刚填充的单元格,也不会重新计算数据更新。

Excel中的计算选项变为自动,甚至将其转为手动,按F9强制重新计算不起作用。

我找到了一些奇怪的方法来完成这项工作:1。选择具有适当公式的特定单元格并按Enter键(对于每个单元格)2。将公式再次拖到故障单元格上(覆盖公式)使用完全相同的公式..)3。参考其他文件(例如,data2.xlsx)的数据表确实有效,但这对我来说是最后的选择。我不想用单独的数据文件来膨胀文件结构。另外,考虑打开这两个文件以使其工作的可怕要求。

提前致谢。

4 个答案:

答案 0 :(得分:3)

看到此链接获得了一些点击,解决方案隐藏在评论部分,这就是答案:

wb$setForceFormulaRecalculation(T)

这适用于大多数软件包(至少基于rJava),因为这个java方法在excel中传递,因此不是由R语言决定的。

答案 1 :(得分:1)

加载工作簿并写入数据后,在将工作簿保存到目录之前强制重新计算公式。

这应该适合你:

writeWorksheet(wb, data=df, sheet="data", startRow=1, startCol=1, header=F)
setForceFormulaRecalculation(wb,"data",TRUE)
saveWorkbook(wb)

答案 2 :(得分:0)

我知道这篇文章是2.5岁,但我和你有完全相同的问题。我怀疑XLConnect存在一些问题。我使用write.csv并且它有效。我对write.csv的问题是我的数据框有超过16384列,我无法在文件中添加另一张图。

答案 3 :(得分:-1)

您可以将此VBA宏放在Excel文档的模块中,并在数据传输后运行(从excel)。

    Sub RefreshCalculations()
        Calculate
    End Sub

即使最简单:在Excel中按F9,这会强制计算所有公式。

对不起我之前的回答。

这个宏适合我,只是测试过:

Sub refresh2()
Dim sht As Worksheet

Dim rng0 As Range
Dim rng1 As Range
Dim c As Range

'loop through the sheets
For Each sht In ActiveWorkbook.Worksheets

    'limit the search to the UsedRange
    Set rng0 = sht.UsedRange
    On Error Resume Next ' in case of no formulas

    'reduce looping further
    Set rng1 = rng0.SpecialCells(xlCellTypeFormulas)

    For Each c In rng1 'loop through the SpecialCells only
        c.Formula = c.Formula
    Next

Next
End Sub