2016-08-22 2 views
1

XLSXパッケージで作成された基本的なExcelワークブックがあります。私はそれを.xlsxファイルとして保存したいが、編集中でないように1つを除くすべての列をロックする。 CellProtection()機能で選択した列にセル保護を設定することはできますが、実際に列を保護するためにワークシートのパスワード保護を有効にする方法はわかりません。Excelファイルを保存し、Rでセル保護を有効にするにはどうすればよいですか?

library(xlsx) 
wb = createWorkbook() 
s1 = createSheet(wb, "Sheet 1") 
addDataFrame(mtcars, s1) #using mtcars as example dataset 
cs = CellStyle(wb, cellProtection = CellProtection(locked=F)) #setting style to unlock cells 
rows <- getRows(s1, rowIndex=2:101) 
cells <- getCells(rows, colIndex = c(2)) #getting the cells to unlock 
lapply(names(cells), function(ii)setCellStyle(cells[[ii]],cs)) #applying unlocking to all columns except the second one (the one i want to leave locked) 

saveWorkbook(wb, "file.xlsx") 

私はExcelファイルをチェックインすると、列2の細胞の性質は、彼らがロック解除していると言うが、その後、私は「シートの保護」をクリックして、手動で実際にすべてのロックするためにパスワードを入力する必要が細胞。

これをRで実行してワークシート保護を有効にする方法はありますか?

+0

を呼び出す前に、私はそれが実装されていないと思います(「パスワード」についての言及は、そのパッケージの中にありませんヘルプページ)とXLConnect :: loadworkbookのヘルプページ(「ワークブック」クラスのRオブジェクトのインスタンスを作成する方法)は次のようになります: "パスワード\t パスワードで保護されたファイルを開くときに使用するパスワード。パスワードは使用されていません。この引数は、create = TRUEを使用して新しいファイルを作成するときは無視されます。 –

+0

ありがとうHack-Rと42-;はい、XLConnectを使用すると、保存時にワークブック全体をパスワードで保護することはできますが、それは私のためには機能しません。私はちょうどいくつかの細胞がユーザーによって編集されないようにしたい。たとえば、SASでこれを行うことが可能であることは分かっているので、Rでケーキになると思いました。間違っていました。 – rocket1906

+0

@ rocket1906それは面白いです、どうやってそれをしますか?私は彼らの文書は、パスワードで保護されたファイルを読むことができると言うが、それはパスワードでファイルを保存することは言及していない。将来の参照のために知っておくとよいでしょう。 –

答えて

2

これは、xlsxが使用するapache POIで直接行うことができます。あなたがsaveWorkbookを呼び出す前に、ちょうど

.jcall(s1, "V", "protectSheet", "mypassword") 

を呼び出します。シートはオブジェクトとして格納されていない場合

+0

うわー、ありがとうございました。これはまさに私が探していたものです。 .jcall関数も私に見せてくれてありがとう - 非常に便利だね。 – rocket1906

0

は、あなたが「.jcall」関数内getSheet付きシート()メソッドを呼び出すことができます。

またrJava::.jcall(wb$getSheet("Sheet1"),"V","protectSheet", "MyPassword123") xlsx::saveWorkbook(wb,"C:/myfilepath)

、明快さを提供するために、 ".jcall"関数は "rJava"パッケージに由来します。このパッケージはインストールされ、正しく動作している必要があります。

2

私は@AEFの答えを使用しています。しかし、今日、私はこれが実際にXLSXパッケージで行うことができますがわかった:もちろん

s1$protectSheet("mypassword"). 

、あなたがsaveworkbook

関連する問題