Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保存Excel文件并在R中启用单元格保护?_R_Excel - Fatal编程技术网

如何保存Excel文件并在R中启用单元格保护?

如何保存Excel文件并在R中启用单元格保护?,r,excel,R,Excel,我有一个使用XLSX包创建的基本Excel工作簿。我想将其另存为.xlsx文件,但锁定除一列以外的所有列,以防止它们被编辑。我可以使用CellProtection()函数为所选列设置单元格保护,但我不知道如何打开工作表的密码保护,以便实际保护列 library(xlsx) wb = createWorkbook() s1 = createSheet(wb, "Sheet 1") addDataFrame(mtcars, s1) #using mtcars as example dataset c

我有一个使用XLSX包创建的基本Excel工作簿。我想将其另存为.xlsx文件,但锁定除一列以外的所有列,以防止它们被编辑。我可以使用
CellProtection()
函数为所选列设置单元格保护,但我不知道如何打开工作表的密码保护,以便实际保护列

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")
库(xlsx)
wb=create工作簿()
s1=创建图纸(wb,“图纸1”)
addDataFrame(mtcars,s1)#使用mtcars作为示例数据集
cs=CellStyle(wb,cellProtection=cellProtection(locked=F))#设置样式以解锁单元格

行您可以直接使用ApachePOI(由xlsx使用)执行此操作。就打电话

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

在调用
saveWorkbook

之前,您可以直接使用ApachePOI(xlsx使用)来完成此操作。就打电话

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

在调用
saveWorkbook

之前,如果工作表未存储为对象,则可以使用.jcall”函数中的getSheet()方法调用工作表:

rJava::.jcall(wb$getSheet(“Sheet1”)、“V”、“protectSheet”、“MyPassword123”)
xlsx::保存工作簿(wb,“C:/myfilepath)


此外,为了清晰起见,“.jcall”函数来自“rJava”包。此包必须安装并正常工作。

如果工作表未存储为对象,则可以使用“.jcall”函数中的getSheet()方法调用工作表:

rJava::.jcall(wb$getSheet(“Sheet1”)、“V”、“protectSheet”、“MyPassword123”)
xlsx::保存工作簿(wb,“C:/myfilepath)


此外,为了清晰起见,.jcall函数来自“rJava”包。此软件包必须安装并正常工作。

我一直在使用@AEF的答案。但今天我发现这实际上可以在xlsx包中实现:

s1$protectSheet("mypassword").

当然,在你调用
saveworkbook
之前,我一直在使用@AEF的答案。但今天我发现这实际上可以在xlsx包中实现:

s1$protectSheet("mypassword").

当然,在调用
saveworkbook

之前,我认为这并没有实现(该软件包的帮助页面中没有提到“密码”),XLConnect::loadworkbook的帮助页面(这是如何创建“工作簿”类的R对象的实例)说:“打开受密码保护的文件时使用的密码。默认值为NULL表示未使用密码。使用create=TRUE创建新文件时忽略此参数。“谢谢Hack-R和42-;是的,使用XLConnect,您可以在保存时对整个工作簿进行密码保护,但这对我不起作用。我只是想保护一些单元格不被用户编辑。例如,我知道这在SAS中是可以做到的,所以我想这在R中是小菜一碟——不过我错了。@rocket1906这很有趣,你是怎么做到的?我看到他们的文档说它可以读取受密码保护的文件,但它没有提到用密码保存文件。很高兴知道这些,以备将来参考。@Hack-R抱歉,我想到的是RDCOMClient软件包。方法如下:eApp没有测试我对手册的阅读能力,但我想它说你只能在用密码打开一个受密码保护的文件后才能保存它。您似乎无法从头创建受pwd保护的文件,我认为这没有实现(该软件包的帮助页面中没有提到“密码”),XLConnect::loadworkbook的帮助页面(这是如何创建“工作簿”类的R对象的实例)显示:“打开受密码保护的文件时使用的密码。默认值为NULL表示未使用密码。使用create=TRUE创建新文件时忽略此参数。“谢谢Hack-R和42-;是的,使用XLConnect,您可以在保存时对整个工作簿进行密码保护,但这对我不起作用。我只是想保护一些单元格不被用户编辑。例如,我知道这在SAS中是可以做到的,所以我想这在R中是小菜一碟——不过我错了。@rocket1906这很有趣,你是怎么做到的?我看到他们的文档说它可以读取受密码保护的文件,但它没有提到用密码保存文件。很高兴知道这些,以备将来参考。@Hack-R抱歉,我想到的是RDCOMClient软件包。方法如下:eApp没有测试我对手册的阅读能力,但我想它说你只能在用密码打开一个受密码保护的文件后才能保存它。看起来你无法创建受pwd保护的文件。哇,非常感谢。这正是我想要的。谢谢你给我展示了.jcall函数-看起来非常有用。哇,非常感谢。这正是我想要的。同时感谢您向我展示.jcall函数——看起来非常有用。