Google 스프레드 시트를 사용하여 빠르고 쉽게 데이터베이스를 사용할 수 있습니다. 사용자가 양식을 제출하면 양식이 저장되어 저장됩니다.추가 된 시간에 대한 시간 소인을 작성하고 고유 한 점증 적 사용자 ID를 작성하려고합니다. 또한 마지막으로 변경된 열을 포함하십시오.
은 내가 Google 애플리케이션 스크립트를 통해 자동 업데이트하기 위해 노력하고있어 세 개의 열이 있습니다
- A '사용자 ID'(이 자동으로 새로운 행이 추가 될 때 생성되어야한다 안 변경 될 수 있어야 함)
- 행이 추가되었을 때의 시간 소인 그냥 'createdAt'열
- 행이 변경된 마지막 시간을 나타내는 'lastChanged'열.
How can I run a script only when someone adds new rows과 Determining the last row in a single column의 조언을 사용했지만 여전히 문제가 있습니다.
지금은 onEdit 이벤트에서 실행하고 있습니다. 그러나 'lastChanged'열이이 이벤트에 의해 트리거되어야하는 유일한 열일 것으로 보이고 다른 열은 changeType=='INSERT_ROW'
과 같이 사용해야합니다. 사용자 세부 정보가 (Zapier를 통해) 제출되면 행이 추가되므로 onEdit가 userId 및 createdAt를 설정하는 데 작동하지 않습니다.
나는 또한 userID를 생성하는 나의 방법이 이상적이라고 생각하지 않는다.
여기까지 내가 지금까지 가지고있는 곳입니다.
function onEdit(e) {
var userId = 1 // column A
var createdTime = 2 //column B
var lastChangedTime = 24 //column X
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = e.source.getSheets()[1]; //gets the second sheet
var editedCell = sheet.getActiveCell(); //gets the edited cell
var Avals = ss.getRange("A2:A").getValues();
var Alast = Avals.filter(String).length;
//set date in same row as edit happens, at fixed column
ss.getActiveSheet().getRange(ss.getActiveRange().getLastRow(), lastChangedTime, 1, 1).setValue(new Date());
//set the created time
ss.getActiveSheet().getRange(ss.getActiveRange().getLastRow(), createdTime, 1, 1).setValue(new Date());
//set the userID
ss.getActiveSheet().getRange(ss.getActiveRange().getLastRow(), userId, 1, 1).setValue(Alast+1); }
그것은 당신이 당신의 솔루션을 공유 정말 괜찮아요하지만 이후 이런 종류의 기술해야한다 솔루션 적용 방법/이유. –
@ Rubén onEdit()가이 문제를 관리하는 가장 효과적인 방법이 아니라 onChange (그리고 스크립트가 찾고있는 문서의 다른 종류의 변경 사항 지정)가 더 나은 목적을 제공한다는 것을 깨달은 것처럼 작동합니다. 이제이 방법을 사용하면 행 추가 여부 또는 셀 편집 여부에 따라 다른 작업을 실행할 수 있습니다. –
설명은 대답에 포함되어야합니다. 코멘트는 일시적인 것입니다 :) –