使用R中的xlsx包更新excel电子表格数字

我有一个关于R的xlsx包的查询。我知道如何使用包中的大部分函数,​​直到现在还没有遇到任何问题。 我将首先显示我的代码,然后会问我的问题。

#Code-Section1: library(xlsx) data1<-iris data1<-data1[,c(5,1:4)] wb <- createWorkbook() sheet1 <- createSheet(wb, sheetName="Sheet1") addDataFrame(data1, sheet1, startRow=1, startColumn=1,row.names=FALSE) saveWorkbook(wb, file="test.xlsx") rm(data1);rm(sheet1);rm(wb) #Code-Section1-end: 

这个部分简单地把虹膜数据集放入名为test.xlsx的Excel电子表格中,称为Sheet1。 现在在Excel中,我决定通过添加一个总行来将更多内容添加到电子表格中,所以Excel电子表格的最后两行是:

 virginica 5.9 3.0 5.1 1.8 876.5 458.6 563.7 179.9 

我做的另一件事是添加4个列的电子表格中包含每个数字的百分比行总数。 接下来,我想将test.xlsx加载到R工作簿中。 我用一些随机的正常值定义了一个名为temp的新数据框。 我的意图是更新test.xlsx文件中的数字,以便行总数和百分比随后也会改变。 根据rnorm(150,5,1)值的输出,更新电子表格的最后两行应该是不同的。 我将数据框保存到名为testa.xlsx的新电子表格中。 值被更新,但由于某些原因,行总数和百分比保持不变,即使它们的单元格的值仍然是“= sum(b2:b151)”或“= b2 / b $ 152”。

 #Code-Section2: temp <- data.frame(Sepal.Length=rnorm(150,5,1), Sepal.Width=rnorm(150,5,1), Petal.Length=rnorm(150,5,1), Petal.Width=rnorm(150,5,1)) wb<-loadWorkbook("test.xlsx") f<-getSheets(wb)[[1]] addDataFrame(temp, sheet=f, startRow=2, startColumn=2,row.names=FALSE,col.names=FALSE) saveWorkbook(wb, file="testa.xlsx") #Code-Section2-end: 

因此,我的问题是,如何加载工作簿,更新数字,以便随后更新具有公式的单元格,然后将其保存到新的Excel文件中。 我可以用另一种方式来做,但是这需要更多的步骤,我不介意做,而只是简单的更新数字,所以其他的单元格就会变得非常方便。 再次和我所做的每一篇文章一样,请原谅任何语法错误,如果您认为有必要,可以随意更改这些信息。

在保存工作簿( wb )之前,添加以下内容:

 wb$setForceFormulaRecalculation(TRUE) 

如果不起作用,这里还有一个VBA解决scheme。

如果要打开Excel文件之前更新公式, 而不需要打开Microsoft Excel,换句话说,“强制重新计算公式”; 你可以使用Apache POI的解决scheme。 适应于R

 library(xlsx) wb<-loadWorkbook("test.xlsx") sheets <- getSheets(wb) sheet <- sheets[["Sheet1"]] rows <- getRows(sheet) cells <- getCells(rows) setCellValue(cells[["1.1"]], 999) # Change a number inside the file wb$getCreationHelper()$createFormulaEvaluator()$evaluateAll() #This is the trick saveWorkbook(wb,"test.xlsx") 

R-package-xlsx Google Groups的更多信息