1

Google 양식을 통해 활동으로 채워지는 Google 시트가 있습니다. 필드 중 하나는 활동 날짜 필드입니다. 완료되면 활동이 appendrow를 통해보고 목적으로 다른 시트로 이동됩니다. Google 애플리케이션 스크립트는 appendrow를 통해 추가 된 행에 행 번호가 필요한 셀 수식을 설정합니다.

var cells = [activityDate, title, completionDate, ...]; 
destsheet.appendRow (cells); 

피벗 테이블의 인구에 도움을하려면 대상 스프레드 시트의 열 중 하나는 다음과 같은 공식 =Text(A1, "MMMM")을 통해 이루어집니다 목적을 그룹화하는 활동의 달입니다. 내가 가진 문제는 "행"을 완전히 채우는 것입니다. 대상 시트에 추가 된 행의 행 번호를 알아야합니다. 예를 들어 행 89를 추가한다고 가정하면 행의 수식 = 텍스트 (A89, "MMMM")로 설정할 수 있습니다. 내가 겪고있는 문제는 appendRow가 원자 적이지만, 추가 된 행이 아니라 워크 시트를 반환한다는 것입니다.

appendRow 다음에 getRange를 통해 행을 가져올 수 있지만 다른 사용자가 appendRow와 getRange 호출 사이에 행을 삽입 할 수 있다고 생각합니다. "= 텍스트 (Indirect (Address (Row(), 1, 4)),"MMMM ")"이되도록 열 수식을 변경하여 내 문제를 해결했습니다. 이것은보고 목적을 위해 활동 날짜에 대해 올바른 형식의 월을 가져옵니다. 스프레드 시트에 익숙하지 않은 사람들을 위해, 제 솔루션에 사용하는 공식은 다소 혼란 스럽습니다.

원자 트랜잭션에서 appendRow를 얻을 수있는 방법이있어서 "행"수에 종속적 일 수있는 행의 셀을 올바르게 구성 할 수 있습니까?

+0

를 사용하여 [잠금 서비스 (https://developers.google.com/apps-script/reference/lock/lock-service) – Cooper

답변

0

어때? 대상 시트의 빈 행을 모두 삭제 한 다음 추가 행 함수에서 행을 추가하는 것과 동일한 트랜잭션에서 getMaxRows() 메서드를 호출하십시오. Google appscript는 동기식이므로 최대 행 정보를 가져 오는 데 걸리는 순간 다른 행을 삽입 할 수 없습니다.

function appendRow() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName('Sheet1'); 
    var row = sheet.appendRow(['Some data']) 
    Logger.log(row.getMaxRows()) 
} 
+0

> 다른 행이는 최대 데 걸리는 순간에 삽입 할 수 없습니다 행 정보 불행히도 사실이 아닙니다. 어쨌든 해결책은 사용하기에 충분합니다. – Kos

+0

저는 바빴고 대안을 연구 할 시간이 없었습니다. 내보고 시트에는 불필요한 행이 없으므로 getMaxRows()는 방금 추가 한 행을 반환합니다. 내가 익숙하지 않은 것은 Google이 다중 사용자 액세스를 처리하는 방법입니다. 동일한 스프레드 시트에 여러 명이 있습니다. 위와 같은 일을 할 생각이었습니다. 사용자 'A'에 대한 getMaxRows() 호출에 앞서 두려움은 사용자 'A'이고 행을 추가하고 사용자 'B'는 행을 추가합니다. – BrianScheffer

+0

위에서 언급 한 첨단 사례는 기술적으로 가능하다고 간주됩니다. 따라서 고유 키 열을 사용하는 것이 좋습니다. 이것에 의해, 사용자가 행을 추가 할 때 고유 인덱스 키가 생성된다는 것을 의미합니다. 키는 사용자 이름 + 이미 시트에있는 키의 증가분으로 구성 될 수 있습니다. 다른 사용자가 고유 한 사용자 이름에 숫자를 더한 값을 포함하고 있기 때문에 다른 사용자가 여전히 고유 한 ID가있는 호출간에 행을 정리합니다. 이후의 모든 호출은 고유 ID를 찾습니다. –

관련 문제