2014-10-14 3 views
0

양식에서 데이터를 가져 와서 양식 제출시 실행되는 추가 기능이있는 Google 스프레드 시트가 있습니다. 이 스프레드 시트의 데이터를 다른 스프레드 시트로 푸시하는 또 다른 추가 기능이 있습니다. 여기에 스프레드 시트 2를 호출 해 봅시다. 스프레드 시트 2에는이 스프레드 시트의 마지막 행을 다른 스프레드 시트로 복사하는 copyLastRow() 함수가있는 자체 스크립트가 있습니다. 스프레드 시트 3이라고 부릅시다. 내 스크립트는 스프레드 시트 2에서 스프레드 시트 3으로 새 행을 추가해야합니다. 수동으로 실행하면 정상적으로 실행되지만 스크립트 편집기의 리소스 용으로 설치 한 프로젝트 트리거를 통해 실행되지 않습니다. 편집 및 변경 트리거를 모두 시도했지만 데이터가 스프레드 시트 2에서 푸시 될 때 단순히 실행되지 않습니다. . 스프레드 시트 2를 실제로 편집 할 때 스크립트가 작동합니다. 그러나, 이것은 내가 필요로하는 것에 좋지 않습니다 - 저는 수동 개입없이 작업하기 위해 스크립트가 정말로 필요합니다. 너 좀 도와 줄 수있어?양식 제출시 마지막 행을 다른 스프레드 시트에 복사

function copyLastRow() { 
var target = SpreadsheetApp.openById('xxxxxxxxx').getSheetByName('Sheet1'); 
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); 
var lastrow = sheet.getLastRow(); 
var sourceData = sheet.getRange(lastrow, 1, 1, 53).getValues(); 
target.appendRow(sourceData[0]); 

EDIT : 코드를 업데이트했습니다. 이전 버전의 코드를 남겼다는 것을 깨달았습니다.

+0

구체적인 문제는 무엇입니까? 그것을 해결하기 위해 이미 시도한 것은 무엇입니까? – Mogsdad

+0

내 스크립트는 작동하지만 두 명 이상의 사용자가 동시에 양식을 제출하는 경우에도 양식이 제출 될 때마다 실행되도록하고 싶습니다. 스크립트에 코드를 추가해야하는지 확인하십시오. – Mica

+0

@Mogsdad 나는 명확하게하기 위해 위의 글을 편집했다 - 글쎄, 나는 그것을 더 분명하게 만들었 으면 좋겠다. 어떤 도움이라도 대단히 감사하겠습니다. – Mica

답변

1

여러 사용자가 양식을 제출할 때이 기능이 효과가 있는지 걱정하지 않으셔도됩니다. 그러나 쉽게 개선됩니다.

무엇이 문제입니까? copyLastRow()이 실행되면 소스 스프레드 시트의 마지막 행에 함수를 트리거 한 응답이 포함되어 있다고 가정합니다. 그러나 그 행을 읽는 것으로 돌아 가기 전에 다른 사용자가 양식을 제출할 수 있습니다. (결국, 함수는 해당 제출에 의해 트리거되고 두 번째 동일한 행을 처리 할 수 ​​있습니다.)

이 상황에서 가장 간단한 개선 사항은 트리거 함수에 제공되는 이벤트 객체를 활용하는 것입니다 매개 변수로. 배경에 대한 자세한 내용은 Google Sheet Events을 참조하십시오.

새로 제출 된 응답은 에 정확히 필요한 배열 인 event.values입니다. 여기에 우리가 당신의 copyLastRow 기능을 업데이트하는 방법은 다음과 같습니다

function copyLastRow(event) { 
    var target = SpreadsheetApp.openById('xxxxxxxxx').getSheetByName('Sheet1'); 
    target.appendRow(event.values); 
} 

는 이제 양식을 제출 얼마나 많은 사용자가 중요하지 않습니다 - 각이 기능에 의해 고유하게 처리됩니다.

+0

나와 함께 견딜 수있는 경우 : 코드에서 e.values를 정의하려면 어떻게해야합니까? 각 열의 변수를 다음과 같이 설정해야한다고 가정합니다. var Timestamp = e.values ​​[0] 등등. 내 코드에서 lastrow var을 유지한다고 가정합니다. 수동으로 코드를 실행하고 양식 제출시 설치 가능한 트리거를 사용하여 "ReferenceError :"e "정의되지 않았습니다."라는 오류 메시지가 나타납니다. 나의 미숙함에 대해 대단히 죄송합니다. – Mica

+0

필자는 오타가 있었는데 ... 대부분의 예제는'e'를 보여주었습니다. 명확하게하기 위해'event'를 사용하려고했지만 한 번의 편집을 놓쳤습니다. 이제 해결되었습니다. 죄송합니다 - 단지'e'를'event'로 변경하십시오. – Mogsdad

+0

나는 매우 부끄럽지만, 코드를 완전히 업데이트 한 것을 보여줄 수 있습니까? 설명서와 다양한 예제를 살펴 보았지만 오류 메시지가 표시되면 제대로 이해하지 못하고 있습니다. 나는 계속 노력할 것이나, 나는 아주 희망한다, 너는 나에게 돌아갈 것이다. – Mica

관련 문제