阻止更改Google电子表格中的单元格

时间:2012-11-12 21:31:55

标签: google-apps-script spreadsheet

我想阻止对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);
  }
};

1 个答案:

答案 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;

  }

}

唯一的小问题是,对于包含公式的单元格,会出现一个小的红色三角形,当您将鼠标悬停在其上时会显示一条消息。无法摆脱那一个。如果您找到解决方案,请告诉我。删除帮助文本无效,因为它返回默认模式。