2013-02-18 67 views
4

我有一個與R中的xlsx軟件包相關的查詢。我知道如何使用軟件包中的大多數功能,直到現在還沒有遇到任何問題。我將首先顯示我的代碼,然後會問我的問題。
使用R中的xlsx軟件包更新excel電子表格數字

#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文件。我可以用另一種方式做它,但它會需要更多的步驟,我不介意做,但只是更新數字,以便其他單元格會改變會非常方便。再次和我所做的每篇文章一樣,請原諒任何語法錯誤,如果您認爲有必要,可隨時更改此消息。

回答

6

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

wb$setForceFormulaRecalculation(TRUE) 

如果它不工作,也有一個VBA解決方案here

+0

你是天才,從來不知道該功能前,在幫助PDF無法找到它。非常感謝你 – 2013-02-18 12:23:04

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") 

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

相關問題