0

現在のところ、Google スプレッドシートではセル範囲のロックが許可されていないようですが、代わりにシート全体でシートごとにロックを行う必要があります。別のユーザーとシートを共有し、シート 1 にデータを入力させたいと考えています。改ざんを防ぐために、シート 1 で行われた最後の変更のタイムスタンプを使用して、データをシート 2 に複製 (自分でロック) したいと考えています。この onEdit() 関数で遊んでいますが、シート 1 を編集したときに更新された時刻が表示されませんが、シート 2 を編集した場合にのみ表示されます。何が間違っているのかわかりません。

function onEdit(e) 
{
  var ss = e.source.getActiveSheet();
  var rr  = e.source.getActiveRange();

//comment 2 lines below if you want it working on all sheets, not just on 2nd one
  if(ss.getIndex()!= 2)
    return;
 ///
  var firstRow = rr.getSheetByName(Sheet2).getRow();
  var lastRow = rr.getSheetByName(Sheet2).getLastRow();

//the last modified date will appear in 12th column
  for(var r=firstRow; r<=lastRow; r++)
    ss.getRange(r, 12).setValue(new Date());
}

これを行う別の方法はありますか?

4

2 に答える 2

0

いくつかの問題があります。まず、範囲オブジェクトで使用しようとしています.getSheetByName()が、そのメソッドはスプレッドシート オブジェクトでのみサポートされています。範囲で実行する.getSheet()と、その範囲が含まれるシートが返されます。次に、書式設定: GAS には標準の Javascript が必要です。つまりiffor関数には{}. これはあなたが望むもののために働くはずです:

onEdit(e){
if(e.range.getSheet().getSheetName()!="Sheet2"){
 var row1=e.range.getRow();
 var col2=e.range.getColumn();
 var row2=e.range.getLastRow();
 var col2=e.range.getLastColumn();
 var data=e.range.getValues();//the data to be copied
 var copySheet=e.source.getSheetByName("Sheet2");//sheet you want to copy to
 var copyRange=copySheet.getRange(row1,col1,row2-row1,col2-col1);// the range data will be copied to
 var time=new Date();
 var timeRange=copySheet.getRange(row,col);//wherever you want the time signature to be. 
 timeRange.setValue(time);//inserts time stamp into sheet
 copyRange.setValues(data);//copies data to the range
}
}

rowandcolを、時間を入れたい行と列に置き換えるだけです。編集された範囲を取り、それをシート 2 の同じ場所にコピーするため、編集するシートがシート 1 だけである場合にのみ機能します。そうしないと、データが重複してしまいます。範囲に合わせてタイムスタンプを設定することもできます。つまり、その位置を(row1,col2+5). これにより、編集範囲の 5 列右になります。

于 2015-08-22T17:23:29.957 に答える
0

スクリプトを使用して他のユーザーによる改ざんを防ぐことはできません。他のユーザーは [ツール] > [スクリプト エディター] に移動し、スクリプトを編集してアイドル状態にし、Sheet1 を編集してからスクリプトを復元できるためです。この問題については、問題トラッカーを参照してください。スプレッドシートの少なくとも 1 つのワークシートを共有している他のユーザーがスクリプトを編集できないように保護することはできません。

一方、スクリプトは別として、誰がいつ編集したかの履歴をいつでも確認できます: [ファイル] > [改訂履歴を表示]。

于 2012-08-02T23:05:19.917 に答える