Google apps script 防止更改google电子表格中的单元格

Google apps script 防止更改google电子表格中的单元格,google-apps-script,spreadsheet,Google Apps Script,Spreadsheet,我想阻止对google电子表格中的K列进行更改。不管有什么价值,我都不想改变。我不喜欢保护功能,因为它使我认为一个丑陋的显示。< /P> 我的密码。不幸的是,它毫无用处。其目的是获取单元格中的当前值,保存它,然后在单元格退出时将其写回,而不是保存可能对单元格所做的任何更改。单元格开始时为空,或者已经修改为包含日期和时间。无论当前内容是否为空,都应在离开单元格后保留相同的值。 函数onEdit(){ var s=SpreadsheetApp.getActiveSheet(); var r=s.g

我想阻止对google电子表格中的K列进行更改。不管有什么价值,我都不想改变。我不喜欢保护功能,因为它使我认为一个丑陋的显示。< /P> 我的密码。不幸的是,它毫无用处。其目的是获取单元格中的当前值,保存它,然后在单元格退出时将其写回,而不是保存可能对单元格所做的任何更改。单元格开始时为空,或者已经修改为包含日期和时间。无论当前内容是否为空,都应在离开单元格后保留相同的值。

函数onEdit(){
var s=SpreadsheetApp.getActiveSheet();
var r=s.getActiveCell();
var columnNum=r.getColumn()
//如果列为K,则阻止任何更改
如果(columnNum==11){
var dateCell=s.getRange(r.getRow(),11);
var v=dateCell.getValue();
dateCell.setValue(v);
}
};

这可能会对您有所帮助。我想出了一个解决你问题的办法,直到谷歌有一个合适的脚本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;

  }

}
功能设置范围保护(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=第一行;

对于(var i=0;i,这可能会对您有所帮助。我提出了一个解决您问题的方法,直到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;

  }

}
功能设置范围保护(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=第一行;
对于(var i=0;i