1

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);
  }
};
4

1 に答える 1

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;

  }

}

これに関する唯一の小さな問題は、数式を含むセルに小さな赤い三角形が表示され、その上にカーソルを合わせるとメッセージが表示されることです。それを取り除くことができませんでした。その解決策を見つけたら、私に知らせてください。デフォルト モードに戻るため、ヘルプ テキストを削除しても役に立ちません。

于 2013-09-18T12:47:52.833 に答える