0

여러 사용자의 입력/업데이트가 필요한 Google 스프레드 시트 형식을 준비했습니다. 3 ~ 4 명의 사용자가 한 번에 같은 시트에 액세스하여 시트의 형식을 업데이트하는 경우가 있습니다.한 번에 Google 스프레드 시트에 여러 번 로그인 할 때 "onEdit function"오류가 발생하여 동시에 업데이트 할 수 있습니다.

문제는 다음과 같습니다. 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 

} 

답변

1

이 공통 "critical section"문제이며, Google 애플리케이션 스크립트를 해결하기 위해 잠금 서비스를 제공합니다.

이 기법을 사용하는 함수의 예는 this answer을 참조하십시오.