0

こんにちは、これは私のシートです:https://docs.google.com/spreadsheets/d/1xkTt_1kLyROkUFComi8-NiKyDMan6617C1dA5UqWTSI/edit?usp=sharingGoogleシートで適切な形式のセル範囲をメールするにはどうすればよいですか?

Google Scriptを使用してメールで範囲A2:F8を共有したいと思います。 は、私の知る限り言うことができるように、このスクリプトは正常に動作します:私は、マージされたセルがマージされた状態になっていないメールを取得するとき

function sendMail(){ 
var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
var data = sh.getRange("A2:O38").getValues(); 
    //var htmltable =[]; 
var TABLEFORMAT = 'cellspacing="2" cellpadding="2" dir="ltr" border="1" style="width:100%;table-layout:fixed;font-size:10pt;font-family:arial,sans,sans-serif;border-collapse:collapse;border:1px solid #ccc;font-weight:normal;color:black;background-color:white;text-align:center;text-decoration:none;font-style:normal;' 
var htmltable = '<table ' + TABLEFORMAT +' ">'; 
for (row = 0; row<data.length; row++){ 
htmltable += '<tr>'; 
for (col = 0 ;col<data[row].length; col++){ 
    if (data[row][col] === "" || 0) {htmltable += '<td>' + 'None' + '</td>';} 
    else 
    if (row === 0) { 
     htmltable += '<th>' + data[row][col] + '</th>'; 
    } 
    else {htmltable += '<td>' + data[row][col] + '</td>';} 
} 
    htmltable += '</tr>'; 
} 
    htmltable += '</table>'; 
    Logger.log(data); 
    Logger.log(htmltable); 
MailApp.sendEmail("[email protected]", 'Daily report','' ,{htmlBody: htmltable}) 
} 

問題があります。 これは1の代わりに3列になります。 誰かがコードを微調整して、私が書式設定されたシートのようになることがありますか?

答えて

1

電子メールを送信したくないため、コードを少し修正しました。テーブルを左上隅に移動してsh.getDataRange()を使用すると、テーブル全体が問題なく取得されます。

これは変更されたバージョンです。

function sendSomething(){ 
var sh = SpreadsheetApp.getActiveSheet(); 
var dataA = sh.getDataRange().getValues(); 
var None = '&nbsp;'; 
var htmltable =''; 
var TABLEFORMAT = 'cellspacing="2" cellpadding="2" dir="ltr" border="1" style="width:100%;table-layout:fixed;font-size:10pt;font-family:arial,sans,sans-serif;border-collapse:collapse;border:1px solid #ccc;font-weight:normal;color:black;background-color:white;text-align:center;text-decoration:none;font-style:normal;' 
var htmltable = '<table ' + TABLEFORMAT +' ">'; 
for (row = 0; row<dataA.length; row++) 
{ 
    htmltable += '<tr>'; 
    for(col = 0 ;col<dataA[row].length; col++) 
    { 
    if (dataA[row][col] === "" || 0) 
    { 
     htmltable += '<td>' + None + '</td>'; 
    } 
    else 
    if (row === 0) 
    { 
     htmltable += '<th>' + dataA[row][col] + '</th>'; 
    } 
    else 
    { 
     htmltable += '<td>' + dataA[row][col] + '</td>'; 
    } 
    } 
    htmltable += '</tr>'; 
} 
    htmltable += '</table>'; 
dispStatus('HTML',htmltable,800,500); 
} 

これは自分のコードに組み込んだ表示ルーチンです。これは私のロガーバージョンです。

function dispStatus(title,html,width,height,modal) 
{ 
    var title = typeof(title) !== 'undefined' ? title : 'No Title Provided'; 
    var width = typeof(width) !== 'undefined' ? width : 400; 
    var height = typeof(height) !== 'undefined' ? height : 300; 
    var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>'; 
    var modal = typeof(modal) !== 'undefined' ? modal : false; 
    var htmlOutput = HtmlService 
    .createHtmlOutput(html) 
    .setWidth(width) 
    .setHeight(height); 
if(!modal) 
{ 
    SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title); 
} 
else 
{ 
    SpreadsheetApp.getUi().showModalDialog(htmlOutput, title); 
} 
} 

さらに日付をフォーマットする必要があります。おそらくUtilitiesを使用することができます。また、ヘッダーにセルをマージする場合は、colspan = "3"を与えるものを特定する必要があります。

関連する問題