将数据从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