6

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スプレッドシートの最後の2行は次のようになります。

virginica   5.9     3.0     5.1     1.8
            876.5   458.6   563.7   179.9

私が行うもう1つのことは、行の合計からの各図のパーセンテージを含む4つの列をスプレッドシートに追加することです。次に、test.xlsxをRブックにロードします。いくつかのランダムな正規値を使用して、tempという新しいデータフレームを定義します。私の意図は、test.xlsxファイルの数値を更新して、行の合計とパーセンテージも後で変更されるようにすることです。更新されたスプレッドシートの最後の2行は、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ファイルに保存されるように図を更新するにはどうすればよいかということです。私はおそらく別の方法でそれを行うことができますが、それは私が行うことを気にしないより多くのステップを必要としますが、他のセルが変更されるように単に数字を更新することはとても便利です。繰り返しになりますが、私が行うすべての投稿と同様に、文法の間違いはご容赦ください。必要と思われる場合は、このメッセージを自由に変更してください。

4

2 に答える 2

11

ブックを保存する前に(wb)、以下を追加します。

wb$setForceFormulaRecalculation(TRUE)

それが機能しない場合は、ここにVBAソリューションもあります。

于 2013-02-18T12:14:54.883 に答える
2

Microsoft Excelを開かなくても、Excelファイルを開くに数式を更新する場合、つまり「数式の再計算を強制する」場合。ApachePOIのソリューションを使用できます。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-xlsxGoogleグループをご覧ください。

于 2017-03-04T19:12:08.613 に答える