2017-05-24 9 views
0

私が探していた答えの一部が見つかりました。ここに私の更新された質問があります:フォーム提出では、フォームに提供された回答に基づいてカスタマイズされた電子メールを生成します。私が持っている問題は、現在のコードが最後の行で見つかったデータを提供していないということです。私が受け取った電子メールには、右のシート、右の列、間違った行からのデータがあります。最後の行(最後のフォーム送信)に関連するデータが必要です。これはどうすればいいですか?問題:電子メールベースのGoogleフォームの回答

function sendEmail(range) { 
Logger.log("[METHOD] sendEmail"); 


var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('THIS SHEET HAS THE DATA I WANT'); 
var values = sheet.getDataRange().getValues() 
var row = values[0]; 

var Name = row[1]; 
var teacherEmail = row[2]; 
var principalEmail = row[3]; 
var riskType = row[13]; 
var riskTodo = row[14]; 

var emailRecipients = "[email protected]"; 
var emailSubject = "Trip plan submitted by "+teacherEmail+""; 
var emailBody = "This is static text that gets pre-filled, the text below is taken directly from the google sheet (and based on what the teacher clicks)<p>\ 
<h3 style='line-height:90%'> These are the hazards: "+riskType+"<br /> <br>(These are the defenses "+riskTodo+")"; 

// SEND EMAIL // 
MailApp.sendEmail({ 
to: emailRecipients, 
subject: emailSubject, 
htmlBody: emailBody 
}); 
} 

これは、フォームへのリンクです:https://docs.google.com/spreadsheets/d/1EUPTkTtJkPA9hEdrb7TM-VOzy6_-ib0Qg9-KZezAgPQ/edit?usp=sharing

+0

動作しないものを指定できますか?問題は、電子メールを送信した後、または最初に電子メールを生成した後も持続していますか? –

+0

エラーは何ですか? –

+0

「うまくいきません」は有用な情報を提供していません。 *どうしたらうまくいかないのかを工夫してください。エラーが発生していますか?期待される行動は何であり、実際に何をしていますか? – Amy

答えて

0

私は(プログラマまたは2の助けを借りて)私の質問に対する答えを見つけることができました。それが他の人に役立つように私はここに答えを掲示しています。私は3つのニーズがありました。

まず、特定のシートから電子メールデータを取得する必要がありました(フォームの回答には別のシートで計算が必要でした)。

第2に、そのシートの最後の行を見つける必要がありました。

第3回:2番目のシートの計算がすべてのセルで繰り返されたため(新しいフォームが回答されたときにプロセスを自動化するため)、最後の行を値ではなく文字列(セル内の可視テキスト) (ほとんどの細胞のバックグラウンド式は、値を持ち空ではない細胞と見なされていました)。ここで

はコードです:

function sendEmail(range) { 

    //Get values in last row of sheet (sheet has a repeating formula in background. 
    // This requires more code to identify last row with 
    // written content as opposed to last row with formula in it) 
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheetname'); //this goes 
              //to the specific sheet I want the data from 
var values = sheet.getDataRange().getValues(); 

var column_2_Data; 
    column_2_Data = sheet.getRange(1,2,sheet.getLastRow(),1).getValues(); 
    column_2_Data = column_2_Data.toString();//this converts column 2 to string 
    column_2_Data = column_2_Data.split(",");//this converts to a 1D array 
     //I chose column 2 because this column did not have a formula in it. 
     //It ended at the same row as the last form submission. 

var lastRowOfData = column_2_Data.indexOf("");//this gets the index of the empty element 
               //(the position of the empty row) 
var lastRow = lastRowOfData - 1; //data is zero indexed - subtract 1 

     //code to link customized portion of the email with specific columns in sheet 
var row = values[lastRow]; 
var name = row[1]; 
var personXEmail = row[2]; 
var bossEmail = row[3]; 
var riskType = row[13]; 
var riskTodo = row[14]; 

     //email content 
var emailRecipients = ""+bossEmail+""; 
var emailSubject = "Trip plan submitted by "+personXEmail+""; 
var emailBody = "This is static text that gets pre-filled, the text below is taken directly from the google sheet (and based on what the person clicks)<p>\ 
        <h3 style='line-height:90%'> These are the hazards: "+riskType+"<br /> <br>(These are the defenses "+riskTodo+")"; 

    // SEND EMAIL 
MailApp.sendEmail({ 
to: emailRecipients, 
subject: emailSubject, 
htmlBody: emailBody 
}); 
} 

あなただけが、このシンプルなコードを使用することができ、それに数式を繰り返してきていないシートの最後の行からデータを取得する必要がある場合。

function sendEmail(range) { 
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheetname'); 
var values = sheet.getDataRange().getValues(); 
var lastRow; 
    lastRow = values.length - 1;//data is zero indexed - subtract 1 
var row = values[lastRow]; 

    //the rest would be 
var name = row[1]; 
var personXEmail = row[2]; 
    //etc...... 

私はこのことができます願っています。

関連する問題