Google apps script 如何在谷歌电子表格中的特定时间后禁用编辑单元格?
用例-我在十几个朋友中分享了一个谷歌电子表格,我们正在输入我们对比赛的预测。接球是在比赛开始前进入。 使用电子表格,因为每个人都可以看到每个人的预测Google apps script 如何在谷歌电子表格中的特定时间后禁用编辑单元格?,google-apps-script,google-sheets,google-spreadsheet-api,Google Apps Script,Google Sheets,Google Spreadsheet Api,用例-我在十几个朋友中分享了一个谷歌电子表格,我们正在输入我们对比赛的预测。接球是在比赛开始前进入。 使用电子表格,因为每个人都可以看到每个人的预测 问题-是否有插件或任何功能允许在特定时间后禁用编辑几个单元格?假设午夜后[7]-M[7]单元格无法编辑。您可以设置脚本在特定时间运行: 在脚本编辑器中,创建一个函数: function protectRangeAtMidnight() { //My code will go here } 在脚本编辑器中,单击“资源”菜单,然后选择“当前项目触
问题-是否有插件或任何功能允许在特定时间后禁用编辑几个单元格?假设午夜后[7]-M[7]单元格无法编辑。您可以设置脚本在特定时间运行: 在脚本编辑器中,创建一个函数:
function protectRangeAtMidnight() {
//My code will go here
}
在脚本编辑器中,单击“资源”菜单,然后选择“当前项目触发器”
为特定日期和时间添加触发器
问题是,代码将做什么?如果您保护该范围,但与您共享电子表格的人具有编辑权限,则他们可以取消对该范围的保护。如果您将他们的权限更改为仅查看,那么您必须在下一个游戏的某个时候将其更改回。只要有一段时间没有其他人可以编辑工作表,这就行了
您可以从编辑器列表中删除用户:
您还可以通过DriveApp设置文件共享权限:
我实际上在做同样的事情,遇到同样的问题。我提出的解决方案不锁定单元格,而是使用数据验证。在线建议的一些解决方案似乎没有考虑到您需要锁定一行有日期关联的结果 这是我用于预测的布局: 蓝色单元格随后具有以下数据验证(标准为自定义公式,拒绝输入):
=if(isnumber(C1)和(now()=0,c1int(C1)=0))
它检查C1中输入的是一个数字。如果是,则检查以下各项:
- 图纸名称(在我的示例中是Sheet1,Sheet2)
- 要保护的范围(在我的示例中是A:D)(编辑器将无法编辑指定的范围)
函数锁(){ 变量选项卡=['Sheet1','Sheet2']; var ss=SpreadsheetApp.getActiveSpreadsheet(); 对于(变量i=0;i
function Unlock() {
var ss = SpreadsheetApp.getActive();
var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i++) {
if (protections[i].getDescription() == 'Protected') {
protections[i].remove();
}
}
};
函数解锁(){
var ss=SpreadsheetApp.getActive();
var保护=ss.getProtections(电子表格应用程序保护类型范围);
对于(变量i=0;i<0.length;i++){
if(保护[i].getDescription()=='Protected'){
保护[i].remove();
}
}
};
那么,您建议我如何使用该代码来保护一个范围?此外,我不需要将他们的权限从“仅查看”更改回“编辑”,因为下一场游戏的预测将位于新行中。更改的权限将用于上一行。对吗?我认为您不能仅为电子表格的一部分设置编辑/查看权限。这就是问题所在。它是整个电子表格的编辑或查看。
=if(isnumber(C1),and(now()<$A1,C1>=0,C1-int(C1)=0))
function Lock() {
var tabs = ['Sheet1', 'Sheet2'];
var ss=SpreadsheetApp.getActiveSpreadsheet();
for (var i = 0; i < tabs.length; i++) {
var spreadsheet=ss.getSheetByName(tabs[i]);
var protection = spreadsheet.getRange('A:D').protect();
protection.setDescription('Protected')
protection.removeEditors(protection.getEditors());
}
};
function Unlock() {
var ss = SpreadsheetApp.getActive();
var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i++) {
if (protections[i].getDescription() == 'Protected') {
protections[i].remove();
}
}
};