2017-02-16 1 views
0

스프레드 시트에서 응답을 캡처하는 Google 양식이 있습니다. 현재 새로운 응답이있을 때마다 새로운 시트를 작성합니다.활성 시트를 Google 시트의 이메일 첨부 파일로 보내십시오.

이제 새 시트를 만드는 기존 스크립트에 "활성 시트 스크립트 메일 보내기"를 추가하려고합니다.

그러나 "요청이 실패했습니다. https://docs.google.com/spreadsheets/d/SS_ID/export에 요청 하시겠습니까?" 다음

var result = UrlFetchApp.fetch(url, { 
     headers: { 
     'Authorization': 'Bearer ' + token 
     } 
    }); 

주위에 나는 이메일 보내기 부분에 대한 guide로이 문서를 사용하고 있습니다.

이것은 전체 스크립트입니다. 이전 @cooper에서 언급 한 바와 같이

function onSubmit(e){ 
    Logger.log('submit ran'); 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 

    //Get last row of data 
    var lastRow = sheet.getLastRow(); 
    var colB_Data = sheet.getRange(lastRow, 2).getValue(); 

    //create sheet name with order no. 
    ss.insertSheet(colB_Data); 

    //order formula 
    var sheets = ss.getSheets()[1]; 

    var cell = sheets.getRange("b2"); 
    cell.setFormula("=TRANSPOSE('Form Responses 1'!B1:AR1)"); 

    var cell = sheets.getRange("c2"); 
    cell.setFormula("=sheetName()"); 

    var cell = sheets.getRange("c3"); 
    cell.setFormula("=transpose(FILTER('Form Responses 1'!C:AR,'Form Responses 1'!B:B=C2))"); 

    var cell = sheets.getRange("d5:d44"); 
    cell.setFormula("=C5*vlookup(B5,'RG Cost'!B:E,4,0)"); 

    var cell = sheets.getRange("d5:d44"); 
    cell.setNumberFormat("[$₹][>9999999]##\,##\,##\,##0;[$₹][>99999]##\,##\,##0;[$₹]##,##0") 

    var cell = sheets.getRange("c47"); 
    cell.setFormula("=sum(C5:C44)"); 

    var cell = sheets.getRange("d47"); 
    cell.setFormula("=sum(D5:D44)"); 

    var cell = sheets.getRange("b47"); 
    cell.setValue('TOTAL'); 


    //Send active sheet as email attachment 

    var ssID = SpreadsheetApp.getActiveSpreadsheet(); 
    var email = Session.getUser().getEmail(); 
    var subject = "Order no."; 
    var body = "Hello"; 

    var token = ScriptApp.getOAuthToken(); 


    var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?" + "format=xlsx" + "&gid=" + "&portrait=true" + "&exportFormat=xlsx"; 

    var result = UrlFetchApp.fetch(url, { 
     headers: { 
     'Authorization': 'Bearer ' + token 
     } 
    }); 


    var contents = result.getContent(); 

    MailApp.sendEmail("[email protected]",subject ,body, {attachments:[{fileName:colB_Data+".pdf", content:contents, mimeType:"application//pdf"}]}); 

}; 
+1

var ssID가있는 행은 Id가 아닌 스프레드 시트 객체를 반환하므로 getId()가 필요하다고 생각합니다. 비록 내가 당신이 그것을 사용하는 곳을 보지 못했지만. 나는 당신이 제공 한 URL이 문자열 SS_ID를 포함하고 있기 때문에 그것을 지적했다. https://docs.google.com/spreadsheets/d/SS_ID/export? – Cooper

+0

RPG : GPF 사용시 참조 된 URL의 URL이/feeds /를 포함하여 귀하와 다른 URL 구조를 사용하지만 사용자가 그렇지 않습니다. –

답변

1

은 SSID는 올바르게 URL에 추가하고, 또한 몇 가지 변경 당신이 보내는

//Send active sheet as email attachment 

    var ssID = SpreadsheetApp.getActiveSpreadsheet().getId(); 
    var sheetgId = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getSheetId(); 
    var email = Session.getUser().getEmail(); 
    var subject = "Order no."; 
    var body = "Hello"; 


    var url = "https://docs.google.com/spreadsheets/d/"+ssID+"/export?" + "format=xlsx" + "&gid="+sheetgId+ "&portrait=true" + "&exportFormat=pdf"; 


    var result = UrlFetchApp.fetch(url) 

    var contents = result.getContent(); 

    MailApp.sendEmail("[email protected]",subject ,body, {attachments:[{fileName:colB_Data+".pdf", content:contents, mimeType:"application//pdf"}]}); 

의 URL과 fetchapp을 만들 수있다되지 않았습니다 같은 드라이브에 직접 HTTP GET을 보내면 사용자가 Google 계정에 로그인되어 스프레드 시트에 액세스 할 수 있으므로 토큰을 다시 필요로하지는 않습니다. 두 번째로 변수를 내보내기 모드 URL의 매개 변수에 추가하는 것을 잊었으며 내보내기 형식을 pdf로 변경했습니다.

+0

그러나 첨부 된 PDF가 손상되어 열려 있지 않습니다. 보내지는 것이 잘못 되었습니까? – RGP

관련 문제