我想阻止对Google电子表格中的K列进行更改。无论有什么价值,我都不希望它改变。我不喜欢保护功能,因为它使我认为是丑陋的显示器。
我的代码。不幸的是,它绝对没有。目的是获取单元格中的当前值,保存它,然后在单元格退出时将其写回,而不是保存可能对单元格进行的任何更改。单元格将为空白以启动,或者已经被修改为包含日期&时间。无论当前内容是否为空白,它在离开单元格后应保持相同的值。
function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
var r = s.getActiveCell();
var columnNum=r.getColumn()
// if column is K then prevent any changes
if (columnNum == 11) {
var dateCell = s.getRange(r.getRow(), 11);
var v=dateCell.getValue();
dateCell.setValue(v);
}
};
答案 0 :(得分:1)
这可能会对你有所帮助。我提出了解决问题的方法,直到Google拥有适当的脚本API来保护范围。这个是使用验证功能,它的工作原理。
function setRangeProtection(rangeToProtect) {
var firstRow = rangeToProtect.getRow();
var noOfRows = rangeToProtect.getHeight();
var firstColumn = rangeToProtect.getColumn();
var noOfColumns = rangeToProtect.getWidth();
var rangeToProtectValues = rangeToProtect.getValues();
var rangeToProtectFormulas = rangeToProtect.getFormulas();
var cellRow = firstRow;
for (var i=0 ; i<noOfRows ; ++i) {
var cellColumn = firstColumn;
for (var j=0 ; j<noOfColumns ; ++j) {
var cell = sheet.getRange(cellRow, cellColumn);
if (rangeToProtectFormulas[i][j] == "") {
var rangeToProtectContent = rangeToProtectValues[i][j];
} else {
var rangeToProtectContent = rangeToProtectFormulas[i][j];
}
var rules = SpreadsheetApp.newDataValidation()
.requireTextEqualTo(rangeToProtectContent)
.setAllowInvalid(false)
.setHelpText('Don\'t mess with the DJ!')
.build();
cell.setDataValidation(rules);
++cellColumn;
}
++cellRow;
}
}
唯一的小问题是,对于包含公式的单元格,会出现一个小的红色三角形,当您将鼠标悬停在其上时会显示一条消息。无法摆脱那一个。如果您找到解决方案,请告诉我。删除帮助文本无效,因为它返回默认模式。