2016-12-08 11 views
0

ログインユーザーとスプレッドシートに記載されている電子メールIDに電子メールを送信できるアプリスクリプトを作成しました。電子メールは、アクティブなユーザと上記のすべての電子メールIDに送信されます。 しかし、私は電子メールをログインユーザーに送信する(これは完了です)と、アプリケーションスクリプトで選択すると、指定した電子メールIDに送信します。電子メールはアプリスクリプトの読み込み時に送信されますが、電子メールを送信する必要がありますonclick

しかし、アプリケーションスクリプトが読み込まれているときに、スプレッドシートのすべての電子メールIDにメールが送信されますが、メールはonclickを送信する必要があります。

function doGet() { 
    return HtmlService 
     .createTemplateFromFile('index') 
     .evaluate(); 
} 


function getData() { 
    return SpreadsheetApp 
     .openById('SS ID') 
     .getDataRange() 
     .getValues(); 
} 

function sendMessage(ManagerID,proNo,proName){ 
var email=Session.getActiveUser().getEmail(); 
    var eId=ManagerID; 
    var subject="Feedback form initiated" ; 
    var message="Feedback form initiated by "+eId; 
    var message2="To fill the feedback form please follow the url: "; 
    var url="googleform's ID"; 
    var subject2="Feedback Form"; 
    MailApp.sendEmail(eId, subject, message); 

    MailApp.sendEmail(email,subject2,message2+url); 
} 





//index.html 
<!DOCTYPE html> 
<html> 
    <head> 
    <base target="_top"> 
    </head> 
    <body onload="document.getElementById('one').style.visibility='hidden'"> 

    <div id="initiateFb"> 
    <form> 
    <? var data = getData(); ?> 
<table border='1px solid black'> 
    <? for (var i = 0; i < data.length; i++) { ?> 
    <tr> 
     <? for (var j = 0; j < data[i].length; j++) { ?> 
     <td><?= data[i][j] ?></td> 
     <?if(j==(data[i].length-1)&&i!=0) { ?> 
     <td><input type="submit" name="submit" value="Initiate" 
     onclick="document.getElementById('initiateFb').style.display = 'none'; 
     document.getElementById('one').style.visibility='visible'; 
     <?var ManagerID=data[i][6];?> <?var proNo=data[i][1];?> <?var proName=data[i][2];?> 
     document.getElementById('div1').innerHTML='<?=data[i][1] ?>'; 
     document.getElementById('div2').innerHTML='<?=data[i][2] ?>'; 
     document.getElementById('div3').innerHTML='<?=data[i][3] ?>'; 
     document.getElementById('div4').innerHTML='<?=data[i][4] ?>'; 
     document.getElementById('div5').innerHTML='<?=data[i][5] ?>'; 
     document.getElementById('div6').innerHTML='<?=data[i][6] ?>'; 
     document.getElementById('div7').innerHTML='<?=data[i][7] ?>'; 
     document.getElementById('div8').innerHTML='<?=data[i][8] ?>'; 
     document.getElementById('div9').innerHTML='<?=data[i][9] ?>'; 
     return false;"/> 
     </td> 
     <? } ?> 
     <? } ?> 
    </tr> 
    <? } ?> 
</table> 

</form> 
</div> 
<div id="one"> 
<form> 
<table> 
<tr> 

<td>ca :</td> 
<td id="div1"></td> 
</tr> 
<tr> 
<td>cb :</td> 
<td id="div2"></td> 
</tr> 
<tr> 
<td>cc:</td> 
<td id="div3"></td> 
</tr> 
<tr> 
<td>cd :</td> 
<td id="div4"></td> 
</tr> 
<tr> 
<td>ce:</td> 
<td id="div5"></td> 
</tr> 
<tr> 
<td>cf:</td> 
<td id="div6"></td> 
</tr> 
<tr> 
<td>cg :</td> 
<td id="div7"></td> 
</tr> 
<tr> 
<td>ch :</td> 
<td id="div8"></td> 
</tr> 
<tr> 
<td>ci:</td> 
<td id="div9"></td> 
</tr> 
</table> 
<input type="submit" name="submit" value="Initiate Feedback" onclick="<?sendMessage(ManagerID,proNo,proName);?>"/> 
</form> 
</div> 


    </body> 
</html> 

私のコードを添付しました。

+1

クライアント側のスクリプトとサーバー側の違いについては、こちらをご覧ください。 <?サーバー側でスクリプトを実行します(ロード中)。ボタンをクリックした後に何かを実行するには、非同期に行う必要があります。この場合、onclick = "<?sendMessage(ManagerID、proNo、proName);?>は次のようにする必要があります:onclick =" google.script.run.sendMessage(..、..、..); "パラメータはクライアント側のスクリプトから、html要素などから読み取る必要があります。 – arturro

+0

応答@arturroに感謝しますが、これもうまくいきませんでした。表示されたエラーはGoogleスクリプトを見つけることができません。 –

答えて

1

arturroは質問コメントにcorrecctです。あなたがHTML本体内ということをやっているので、非同期あなたを呼び出すようにするには、使用

google.script.run.sendMessage(ManagerID,proNo,proName) 

しかし、ノートを作る

<input type="submit" name="submit" value="Initiate Feedback" onclick="google.script.run.sendMessage(ManagerID,proNo,proName)" 

ことは動作しませんしなければなりません。 <script></script>の間のjavascriptコードを使用して、必要な変数を取得してから、google.script.runを使用して電子メールを送信することをお勧めします。

だから、それは

は、私が行っているサーバー側のスクリプトの呼び出しを処理するクライアント側のスクリプトがあるよう<script></script>一部があなたのindex.htmlにすることになっている

<script> 
    function sender() { 
     var ManagerID, proNo, proName; 

     //use Document.getElementById in order to populate the variables with 
     //what you need from the form 

     google.script.run.sendMessage(ManagerID, proNo, proName); 
    } 
</script> 
<input type="submit" name="submit" value="Initiate Feedback" onclick="sender()"> 

だろう似たようなもので、うまく動作します。

関連する問題