【问题标题】:E-mail sheet preview with formatting in HTML body + attach sheet带有 HTML 正文格式的电子邮件表预览 + 附件表
【发布时间】:2018-07-30 12:24:42
【问题描述】:

我已申请 this solution 将 Google 表格的行作为 HTML 正文的一部分通过电子邮件发送。

不幸的是,它出错了,因为 HTML 正文设置了限制。我的数据中的行数是动态的。

超出限制:电子邮件正文大小。 (第 209 行,文件“SideBar”)

有没有办法解决这个问题?我可以在 HTML 正文上提供行的预览,比如说 10 行的所有列,然后提供查看其余部分的链接。因为工作表上的内容发生了变化,所以链接不应指向该工作表。相反,我正在考虑将工作表的副本作为新文件保存在他们自己的驱动器上并链接到该文件。另一种选择是附加一个包含所有行的 HTML 文件。

这是我目前拥有的:

function emailBreakdown(emailUser, bodyAdd){
  SpreadsheetApp.getActiveSpreadsheet().toast('Please wait while information is refreshed.');
  if(emailUser == null){emailUser = 'xxxxx@yyyyyy.com'}
  if(bodyAdd == null){bodyAdd = 'Testing running of function on script editor'}
  var ss = SpreadsheetApp.getActive();
  var detailsSht = ss.getSheetByName("Details");
  var dataRange = detailsSht.getDataRange();
  var curDate = Utilities.formatDate(new Date(), "GMT+1", "MM/dd/yyyy");
  var subject = 'Summary - Exported Data ' + curDate;
  var body = '<br />---------------------------------------------------------------<br />You have received an export of a dataset from the <a href="google.com">Summary</a> dashboard. Please see below:<br /><br />' //provide link to the whole dashboard.

  convSheetAndEmail(dataRange, emailUser, body, bodyAdd, subject);
}

function convSheetAndEmail(rng, emailUser, body, bodyAdd, subject){
  var HTML = SheetConverter.convertRange2html(rng);
  MailApp.sendEmail(emailUser, subject, '', {htmlBody : bodyAdd + body + HTML});
}

【问题讨论】:

  • 提供确切的错误
  • @I'-'I 这是错误代码:Limit Exceeded: Email Body Size. (line 209, file "SideBar")
  • 我想我找到了解决方案。我将发布作为答案。我对其他人的建议持开放态度,所以我暂时不会选择自己的答案。

标签: google-apps-script google-sheets gmail


【解决方案1】:

以下是我通过进一步研究能够组装的代码。它运作良好并满足了我的要求。它的作用如下:

  • 附加一张纸。在这种情况下,一个 xls 文件。选择这个而不是 HTML。允许用户在需要时在 excel 中进行操作。
  • 在电子邮件正文中以 HTML 格式提供 10 行的预览。
  • 预览和附加文件保留格式。

它没有解决的问题:

  • 将文件保存到用户的个人驱动器。

这里是:

function emailBreakdown(emailUser, bodyAdd){
  SpreadsheetApp.getActiveSpreadsheet().toast('Please wait while information is refreshed.');

  //If running on script editor the variables will not be transferred. Assign values below:
  if(emailUser == null){emailUser = 'xxxxxx@yyyyyyy.com'}
  if(bodyAdd == null){bodyAdd = 'Testing running of function on script editor'}

  var ss = SpreadsheetApp.getActive();
  var detailsSht = ss.getSheetByName('Details');
  var dataRange = detailsSht.getRange('A1:FS11'); //For the preview we are only looking at the first 10 rows of data.
  var curDate = Utilities.formatDate(new Date(), 'GMT+1', 'MM/dd/yyyy');

  //Gather data to convert specific sheet to excel document so it can be attached to the e-mail
  var ssID = SpreadsheetApp.getActiveSpreadsheet().getId();
  var sheetID = detailsSht.getSheetId().toString()
  var requestData = {'method': "GET", 'headers':{'Authorization':'Bearer ' + ScriptApp.getOAuthToken()}};
  var url = 'https://docs.google.com/spreadsheets/d/' + ssID + '/export?format=xlsx&id=' + ssID + '&gid=' + sheetID;
  var result = UrlFetchApp.fetch(url , requestData);  
  var contents = result.getContent();

  //Assemble E-mail components
  var subject = 'Summary - Exported Data ' + curDate;
  var body = bodyAdd + 
    '<br /><br /><hr style="border: none;border-top: 3px double #333;color: #333;overflow: visible;text-align: center;height: 5px;"><br />' +
    'You have received an export of a dataset from the <a href="https://docs.google.com/spreadsheets/d/' + ssID + '/">Summary</a> dashboard. Below is a preview of the dataset:<br /><br />'
  var afterBody = '<br /><br /><b>You can view the full dataset through the attached XLS file.</b>'

  convSheetAndEmail(ss, contents, dataRange, emailUser, body, afterBody, subject);
};

function convSheetAndEmail(ss, contents, rng, emailUser, body, afterBody, subject){
  var HTML = SheetConverter.convertRange2html(rng);

  //Send email
  MailApp.sendEmail(
    emailUser, 
    subject, 
    '',{
     htmlBody : body + HTML + afterBody,
     name: 'Full Data Export',
     attachments:[{fileName:'Export Data - ' + ss.getName() + '.xls', content:contents, mimeType:'application//xls'}]
    }
  );
};

除了问题中列出的资源,我还借用here.的代码

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2019-07-20
    • 1970-01-01
    • 2016-01-05
    • 2011-04-14
    • 2020-12-14
    • 2012-06-18
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多