2012-03-22 3 views
0

내가 구글 문서 도구 스프레드 시트를 사용하여 양식을 작성하고 사용자가 양식을 채우고 때 이메일을 전송하는 스크립트를 생성 값 :Google 문서 도구 스프레드 시트, 이메일을 보내 주문

 
function sendFormByEmail(e){ 

     var email = "AAA"; 
     var subject = "XXX"; 
     var message = ""; 
     for(var field in e.namedValues) 
     message += field + ' = '+ e.namedValues[field].toString() + "\n\n"; 

     var advancedArgs = {replyTo:e.namedValues['E-mail'].toString()}; 
     MailApp.sendEmail(email, subject, message, advancedArgs); 


} 

스크립트가 작동 하지만 때를 그것은 전자 메일을 보내고 데이터는 양식의 필드로 정렬되지 않습니다.

어떻게 스프레드 시트 (양식)에있는 값을 정렬하도록 스크립트를 수정할 수 있습니까?

+0

javascript 's for (... in ...)는 임의의 순서로 실행됩니다. 주문 관련성이있는 경우 사용하지 말라는 문서 자료. –

답변

1

스프레드 시트에서 열 순서를 얻을 수 있습니다. 이런 식으로 뭔가가 :

function sendFormByEmail(e){ 

     var email = "AAA"; 
     var subject = "XXX"; 
     var message = ""; 
     var s = SpreadsheetApp.getActive().getSheetByName("Sheet1"); 
     var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0]; 
     for(var i in headers) 
     message += headers[i] + ' = '+ e.namedValues[headers[i]].toString() + "\n\n"; 

     var advancedArgs = {replyTo:e.namedValues['E-mail'].toString()}; 
     MailApp.sendEmail(email, subject, message, advancedArgs); 
} 

당연히, 당신은 당신의 실제 시트 이름에 시트 이름 Sheet1을 변경해야합니다. 그건 그렇고, 나는 이것을 훨씬 더 많이하는 스크립트를 작성했다. 아마도 이것을 (프로그래밍 연습 일뿐만 아니라) 확인하고 싶을 것이다. FormEmailer이고 스크립트 갤러리와 해당 site에서 찾을 수 있습니다.

+0

특히 양식을 편집하고 필드를 추가 및 삭제 한 후에는 열 순서가 필드 순서와 다를 수 있으므로주의하십시오. –

+0

동의하지만이 경우 스프레드 시트로 이동하여 원하는 순서로 열을 정렬하는 것이 쉽습니다. Google 설문지에는 API가 없으므로 실제 주문을 알 수있는 유일한 방법은 html을 분석하는 것입니다. –

+0

잠깐, 열의 순서를 바꿀 수 없으며 양식은 같은 위치에 계속 답을 씁니다. 그러면 필드가 혼합됩니다. –