【问题标题】:preventing changes to a cell in google spreadsheet防止更改谷歌电子表格中的单元格
【发布时间】:2012-11-12 21:31:55
【问题描述】:

我想阻止更改谷歌电子表格中的 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);
  }
};

【问题讨论】:

    标签: google-apps-script spreadsheet


    【解决方案1】:

    这可能会对您有所帮助。在谷歌有一个适当的脚本 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;
    
      }
    
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多