如何在Google工作表中以适当的格式邮寄单元格范围?

时间:2017-03-20 11:07:42

标签: javascript email google-apps-script google-sheets google-sheets-api

嗨,这是我的表格:https://docs.google.com/spreadsheets/d/1xkTt_1kLyROkUFComi8-NiKyDMan6617C1dA5UqWTSI/edit?usp=sharing

我想使用谷歌脚本在电子邮件中分享范围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("myemail@gmail.com", 'Daily report','' ,{htmlBody: htmltable})
}

问题是当我收到邮件时,合并的单元格不处于合并状态。 这导致3列而不是1列。 有人可以调整代码,以便我得到完全像我格式化的表格。

1 个答案:

答案 0 :(得分: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”。