![](/img/trans.png)
[英]Google Spreadsheet - Scripts, copy cell from one sheet to another sheet EVERYDAY at a specific time
[英]Google scripts for cell protection at a specific time
我需要帮助来编写脚本。 这就是我想要做的:根据编程的时间表保护特定的细胞。 我能够根据时间限制保护细胞。 为了保护,我很难每天更换细胞。 例如,我想保护:A1:B5(第 1 天)、C1:D5(第 2 天)、A6:B10(第 3 天)、C6:D10(第 4 天)。 我不知道该怎么做。
这是我找到的一个脚本,对我来说效果很好,但我需要另一个部分用于不同的单元格。
function AddProtectionToColumn() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getRange('A1:B5');
var protectSs = range.protect().setDescription('Protect');
var me = Session.getEffectiveUser();
protectSs.addEditor(me);
protectSs.removeEditors(protectSs.getEditors());
if (protectSs.canDomainEdit()) {
protectSs.setDomainEdit(false);
}
}
另外,我没有太多的脚本编写经验,我的第一语言是法语。 我希望我的解释很清楚。
您可以创建第二个 function,它根据星期几设置您想要的范围,并从您当前的 function 中调用它:
function AddProtectionToColumn() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = GetRange(ss);
var protectSs = range.protect().setDescription('Protect');
var me = Session.getEffectiveUser();
protectSs.addEditor(me);
protectSs.removeEditors(protectSs.getEditors());
if (protectSs.canDomainEdit()) {
protectSs.setDomainEdit(false);
}
}
function GetRange(ss){
var today = new Date().getDay();
// assuming you're only making protected ranges on the first sheet
var protections = ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE);
if (today == 0){ // sunday
//assuming you want to remove yesterday's protection
removeProtections(protections);
return ss.getRange('range-for-sunday');
}
else if (today == 1){ // monday
removeProtections(protections);
return ss.getRange('range-for-monday');
}
else if (today == 2){ // tuesday
removeProtections(protections);
return ss.getRange('range-for-tuesday');
}
else if (today == 3){ // wednesday
removeProtections(protections);
return ss.getRange('range-for-wednesday');
}
else if (today == 4){ // thursday
removeProtections(protections);
return ss.getRange('range-for-thursday');
}
else if (today == 5){ // friday
removeProtections(protections);
return ss.getRange('range-for-friday');
}
else if (today == 6){ // saturday
removeProtections(protections);
return ss.getRange('range-for-saturday');
}
}
function removeProtections(protections){
for (var i = 0; i < protections.length; i++){
protections[i].remove();
}
}
我添加的removeProtections()
function 以防您想删除前一天的保护,如果您想保留它们,可以将其删除。
参考:
function AddProtectionToColumn() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = GetRange(ss);
var protectSs = range.protect().setDescription('Protect');
var me = Session.getEffectiveUser();
protectSs.addEditor(me);
protectSs.removeEditors(protectSs.getEditors());
if (protectSs.canDomainEdit()) {
protectSs.setDomainEdit(false);
}
}
function GetRange(ss){
var today = new Date().getDay();
// assuming you're only making protected ranges on the first sheet
var protections = ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE);
if (today == 0){ // sunday
return ss.getRange('A1:B5');
}
else if (today == 1){ // monday
return ss.getRange('C1:D5');
}
else if (today == 2){ // tuesday
return ss.getRange('A6:B10');
}
else if (today == 3){ // wednesday
return ss.getRange('C6:D10');
}
else if (today == 4){ // thursday
return ss.getRange('A7:B11');
}
else if (today == 5){ // friday
return ss.getRange('C7:D11');
}
else if (today == 6){ // saturday
return ss.getRange('A8:B12');
}
}
你好。 这是运行良好的最终版本! 感谢拉法吉列尔莫。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.