2017-02-16 21 views
0

私はスプレッドシートでレスポンスを取得するGoogleフォームを持っています。現在、新しい応答が作成されるたびに、新しいシートが作成されます。アクティブシートをGoogleシートから電子メールの添付ファイルとして送信

新しいシートを作成する既存のスクリプトに「アクティブシートスクリプトをメールする」を追加しようとしています。

ただし、「https://docs.google.com/spreadsheets/d/SS_ID/exportのリクエストに失敗しましたか?」というエラーが表示されます。次

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

の周りに私は、送信メールの一部のためのguideとしてこの記事を使用しています。

これは私が使用しているスクリプト全体です。

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ではないSpreadsheetオブジェクトを返すので、getId()が必要だと思います。私はどこでそれを使用して表示されません。あなたが提供したURLに文字列SS_IDが含まれているので、私はそれを指摘しました。 https://docs.google.com/spreadsheets/d/SS_ID/export? – Cooper

+0

RPG:GPFで参照される投稿のURLは、/ feeds /を含むあなたとは異なるURL構造を使用しますが、そうではありません。 –

答えて

1

前@cooperで述べたように、SSIDが正しくURLに追加されなかった、ともあなたが送っているURLとあなたのfetchapp

//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"}]}); 

を作られているいくつかの変更がありますHTTP GETをあなたの同じドライブに直接送信するので、ユーザーはGoogleアカウントに記録され、スプレッドシートにアクセスできます。したがって、トークンはもう本当に必要ありません。 2番目の変数をエクスポートモードURLのパラメータに追加するのを忘れてしまい、エクスポート形式をpdfに変更しました。

+0

これは動作していますが、接続されたpdfは壊れていません。送信されたものに何か問題はありますか? – RGP

関連する問題