我有一个关于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的Sheet中。现在在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文件中。我可以用另一种方式做到这一点,但它需要更多的步骤,我不介意做,只是更新数字,所以其他单元格将改变将是如此方便。与我发表的每篇文章一样,请原谅任何语法错误,如果您认为有必要,请随时更改此消息。
答案 0 :(得分:8)
答案 1 :(得分:1)
如果要在打开Excel文件之前更新公式,不需要需要打开Microsoft Excel,换句话说,“强制重新计算公式”;您可以使用Apache POI中的解决方案。适用于 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")
的更多信息