0

複数のユーザーからの入力/更新を受け取るGoogleスプレッドシートのフォーマットを用意しました。シートのフォーマットを更新するために、ある時点で3人または4人のユーザーが同じシートにアクセスしている場合があります。

問題は次のとおりです。シートの行を編集するときにonEdit関数が日付/タイムスタンプに対して起動すると、エラーが発生します( "oops ...")。このエラーが表示された場合、タイムスタンプの大部分は挿入されません。

これは、同時に複数の行に対して頻繁に行われる編集である可能性があります。誰かが私にこの問題を克服する方法を教えてもらえますか?onedit関数のない行ベースのタイムスタンプ/日付のオプションまたは代替手段はありますか。

以下は、日付/タイムスタンプに使用したスクリプトです。以下のスクリプトにエラーがある場合は、修正してください。

function onEdit(){

 var s = SpreadsheetApp.getActiveSheet();  

 var sheetname = SpreadsheetApp.getActiveSheet().getName()

 var s = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Footfall-Format');

if(s.getName() == 'Footfall-Format' ) { //checks that we're on the correct sheet

var totrows = s.getMaxRows();

var r = s.getActiveCell();

if( r.getColumn() >= 2 &&  r.getColumn() <= 15) { //checks the column

// in order to conver -ve to +ve 

if(r.getColumn() < 0){

r.getColumn() = r.getColumn() * -1;

} 

//diffrence of colums makes a standar col

var settimsmp = 16 - r.getColumn();

//cahnge negetive num,ber to +ve then caculate row number;

var nextCell = r.offset(0, settimsmp);

if( nextCell.getValue() === '' ) //is empty?

var stringdate = new Date();

time = Utilities.formatDate(new Date(stringdate), "GMT", "dd-MMM-yyyy");   

nextCell.setValue(time);

SpreadsheetApp.flush(); //force the data to be written            

};

};

SpreadsheetApp.flush(); //force the data to be written

}
4

1 に答える 1

1

これは一般的な「クリティカル セクション」の問題であり、Google Apps Script はこの問題に対処するためのロック サービスを提供します。

この手法を利用した関数の例については、この回答をご覧ください。

于 2013-05-28T16:40:25.183 に答える