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

R(3.0.2)/ MSOffice 2013 / Win7

假设我们有一个现有的data.xlsx文件,其中有两个工作表 – “data”和“calc”。

“数据”表通过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) 

所以这里出现了这个问题 – 我有“计算”表引用“数据”表与公式。 由于某些原因,更新数据不会被重新计算,即使公式引用了刚刚填充的单元格。

在Excel中的计算选项被转换为自动,甚至把它转换为手动,并按F9强制重新计算不起作用。

我发现了一些奇怪的方法来做这个工作:1.select具有适当公式的特定单元格,然后按回车键(对于每个单元格)2.将公式重新覆盖错误的单元格(用相同的公式覆盖公式..)3.参考其他文件(比如说data2.xlsx)的数据表确实可行,但这对我来说是最后的select。 我不想膨胀文件结构与单独的数据文件。 另外,考虑到这个可怕的要求,打开这两个文件,以使其工作。

提前致谢。

看这个链接获得一些点击和解决scheme隐藏在评论部分,这里的答案是:

wb$setForceFormulaRecalculation(T)

这应该适用于大部分包(至less基于rJava的包),因为这个java方法在excel中传递,因此不是由R语言决定的。

我知道这个职位是2.5岁,但我只是有与你完全相同的问题。 我怀疑XLConnect有一些问题。 我用write.csv ,它的工作。 我用write.csv的问题是,我的数据write.csv有超过16384列,我不能将另一个工作表添加到该文件。

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

这应该为你工作:

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

你可以把这个VBAmacros放在你的excel文件的一个模块中,并在你的数据传输之后运行(从excel)。

  Sub RefreshCalculations() Calculate End Sub 

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

对于我之前的回答,我感到抱歉。

这个macros为我工作,只是testing:

 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