2

私はコーディングがまったく初めてで、少しのコードについて助けが必要です。ここに私の問題があります: Google スプレッドシートで多数のセルのデータを取得し、電子メールで送信したいと考えています。データをメールに取り込んで送信する方法はわかりましたが、データはコンマで区切られているだけで、区別がつきません。各セルのデータを電子メールの別の行に表示するにはどうすればよいですか? 私は配列でこれを行うことができると信じていますが、私が言ったように、私はこれが初めてで、これまで読んだことでそれを行う方法がわかりません. 説明を提供していただければ、それも大歓迎です。これにより、同じ質問を再度尋ねずに済み、教えてくれることを願っています。ご理解とご協力をお願いいたします。

function emailData() {

//Gather data from "Responses" sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var responses = ss.getSheetByName("Form Responses");
var lastRow = responses.getLastRow();
var data = responses.getRange("A"+(lastRow)+":AK"+(lastRow));
var values = data.getValues();

//Gather email addresses from "Email" sheet (I have not gotten this far yet)
var email = ss.getSheetByName("Email");
var startRow = 2;
var emailAdress = "email@email.com";
var subject = "Capacity Campaign Contact Form";
MailApp.sendEmail(emailAdress,subject,values);
}
4

2 に答える 2

6

配列 (Values と呼ばれます) は、シートの行に対応する 2 次元配列です。つまり、最初の要素を反復処理する必要があります。次のようなヘッダーと値でメッセージを構成する関数を含む小さなスクリプトを作成しました。

function test(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var responses = ss.getSheetByName("Form Responses");
  var lastRow = responses.getLastRow();
  var values = responses.getRange("A"+(lastRow)+":AK"+(lastRow)).getValues();// get the range and values in one step
  var headers = responses.getRange("A1:AK1").getValues();// do the same for headers
  var message = composeMessage(headers,values);// call the function with 2 arrays as arguments
  Logger.log(message);// check the result and then send the email with message as text body
}

function composeMessage(headers,values){
  var message = 'Here are the data :'
  for(var c=0;c<values[0].length;++c){
    message+='\n'+headers[0][c]+' : '+values[0][c]
  }
  return message;
}

同じ構造を使用して、html テーブルを使用して、さらに見栄えの良いメールを html 形式で作成できることに注意してください(参照はこちら)。


EDIT2

テーブル内のテキストと HTML の両方で生成する小さなコードを書きました。色などを使用して HTML の書式設定を自由に改善してください...

function testMail(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var responses = ss.getSheetByName("Sheet1");
  var lastRow = responses.getLastRow();
  var values = responses.getRange("A"+(lastRow)+":M"+(lastRow)).getValues();
  var headers = responses.getRange("A1:AK1").getValues();
  var message = composeMessage(headers,values);
  var messageHTML = composeHtmlMsg(headers,values);
  Logger.log(messageHTML);
  MailApp.sendEmail(Session.getEffectiveUser().getEmail(),'test html', message,{'htmlBody':messageHTML});
}

function composeMessage(headers,values){
  var message = 'Here are the data you submitted :\n'
  for(var c=0;c<values[0].length;++c){
    message+='\n'+headers[0][c]+' : '+values[0][c]
  }
  return message;
}


function composeHtmlMsg(headers,values){
  var message = 'Here are the data you submitted :<br><br><table style="background-color:lightblue;border-collapse:collapse;" border = 1 cellpadding = 5><th>data</th><th>Values</th><tr>'
  for(var c=0;c<values[0].length;++c){
    message+='<tr><td>'+headers[0][c]+'</td><td>'+values[0][c]+'</td></tr>'
  }
  return message+'</table>';
}

編集3

あなたのコメントに続いて:これは私のテストシート+スクリーンキャプチャのログです。ログをチェックして、データで同様の構造が得られるかどうかを確認してください。

[13-07-16 14:29:40:920 CEST] Here are the data you submitted :<br><br><table style="background-color:lightblue;border-collapse:collapse;" border = 1 cellpadding = 5><th>data</th><th>Values</th><tr><tr><td>Titre</td><td>Mr</td></tr><tr><td>nom</td><td>Wales</td></tr><tr><td>prénom</td><td>xavier</td></tr><tr><td>adresse</td><td>Sunset Bld, 45678</td></tr><tr><td>code</td><td>5000</td></tr><tr><td>ville</td><td>Los Angeles</td></tr><tr><td>pays</td><td>USA</td></tr><tr><td>email</td><td>john.smith@gmail.com</td></tr><tr><td>tél1</td><td>1212345654345</td></tr><tr><td>tél2</td><td></td></tr><tr><td>Commun</td><td>Théâtre</td></tr><tr><td>GROUPE</td><td>Festival</td></tr><tr><td>organisme</td><td>xxx</td></tr></table>

ここに画像の説明を入力

  • 「th」はヘッダータグです(<>の間はブラウザに表示されないのでここには書きません)
  • 「td」はセルタグです(<>の間はブラウザに表示されないのでここには書きません)
  • 「tr」は「row」タグです(<>の間はブラウザに表示されないのでここには書きません)

これらの各タグは、有効にするために /t... 終了タグ (<> で囲む) で終了する必要があります。ログ データでわかるように、スクリプトのループ構造が自動的に処理します。

また、ループの最後にテーブル終了タ​​グを追加したことにも注意してください...最初のコードでは忘れていましたが、テストではそのように機能しました。

于 2013-07-15T17:13:55.900 に答える
0

ご覧のとおり、"Business or Church" の前に tr 開始タグがありません。ただし、私のコードはあなたのものとまったく同じようです。スクリーンショットで何をしているのかを見ることができます。

[13-07-16 08:05:34:247 EDT] Here is the data you submitted :<br><br><table style="background-color:white;border-collapse:collapse;" border = 2 cellpadding = 5><th>Question</th><th>Answers</th><tr><td>Timestamp</td><td>Thu Jun 06 2013 10:18:31 GMT-0400 (EDT)</td></tr><td>Business or Church Name</td><td>Tim K</td></tr><td>Name</td><td>Test</td></tr><td>Business or Church Name</td><td>business</td></tr><td>Your Name</td><td>Blank, Gary</td></tr><td>Meeting Date</td><td>date</td></tr><td>Meeting Lead</td><td>Jerry 

スクリーンショット

于 2013-07-16T12:19:08.657 に答える