首页 > 解决方案 > 为特定工作表创建 CSV 文件,然后发送带有表格的电子邮件(文件名和链接)

问题描述

谁能对我整整一周都在研究的以下问题有所了解,我快到了,我只有一两个问题。首先,电子邮件中表格的格式,如您所见,在随附的屏幕截图中,它没有正确对齐,并且No应该停止在 3 时上升到 6,同样我无法显示边框。其次,我不知道我是否采取了正确的方法来推送文件名和链接的数组,以便使用创建一个新的数组(数组)var vA = [attachment, filenames],这是在表中使用它的正确方法吗?最后,是否可以重新使用电子邮件的 html 正文,showModalDialog以便用户知道操作已完成并且如果他们想在对话框中可以直接访问文件?

目前收到的邮件:

在此处输入图像描述

代码:

function test(){
  
  // Create CSV files for these Sample Sheets Names
  var mySheets = ['Sheet1', 'Sheet2', 'Sheet3'];
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets(); 
  var attachment = [];
  var filenames = [];
  var folder = "ID HERE";
  for (var i = 0 ; i < sheets.length ; i++) {
    var sheet = sheets[i];
    var name = sheet.getName();
    
    // will create a csv file for Sheet1, Sheet2, Sheet3 only and ignore the other sheets
    if (mySheets.indexOf(name) !== -1) {

      // append ".csv" extension to the sheet name
      fileName = sheet.getName() + ".csv";
      
      // convert all available sheet data to csv format
      var csvFile = convertRangeToCsvFile_(fileName, sheet);
      
      // create a file in the Docs List with the given name and the csv data
      var url = DriveApp.getFolderById(folder).createFile(fileName, csvFile).getId();
      
      attachment.push("https://drive.google.com/uc?export=download&id=" + url);
      filenames.push(fileName);
       }
  }      
  // I'm trying to create an array of arrays (files names & respective links)
      var vA = [attachment, filenames]
  
  Logger.log(vA);
  var recipient = Session.getActiveUser().getEmail();
  var subject="Test CSV for specific sheets";
  // Got inspired by Cooper's answers for this:
  var html='<style>th,td{border:2px solid black;}</style><table><tr><th>No</th><th>Link</th><th>Class</th>';
  var item = 1;
  for(var i=0;i<vA.length;i++) {
    html+='<tr>';
    for(var j=0;j<vA[i].length;j++) {
      if(i==0) {
        html+=Utilities.formatString('%s<td><a href="%s">Link</a></tr></td>',item++,vA[i][j]);
      }else{
        html+=Utilities.formatString('%s</tr><tr><td><th><td>%s</tr></td>',item++,vA[i][j]);
      }
    }
  }
  html+='</table>';
      GmailApp.sendEmail(recipient, subject,'',{htmlBody: html});
}

function convertRangeToCsvFile_(fileName, sheet){
  // some code here
}

理想情况下,我正在尝试使用以下格式或类似格式发送电子邮件:

在此处输入图像描述

标签: google-apps-scriptgoogle-sheets

解决方案


我相信你的目标如下。

  • 您希望使用 Google Apps 脚本将 HTML 正文作为问题中显示的底部图像的表格。

为此,这个答案怎么样?在这个答案中,我想建议修改您的 HTML。

修改后的脚本:

当您的脚本被修改时,请进行如下修改。

从:
var html='<style>th,td{border:2px solid black;}</style><table><tr><th>No</th><th>Link</th><th>Class</th>';
var item = 1;
for(var i=0;i<vA.length;i++) {
  html+='<tr>';
  for(var j=0;j<vA[i].length;j++) {
    if(i==0) {
      html+=Utilities.formatString('%s<td><a href="%s">Link</a></tr></td>',item++,vA[i][j]);
    }else{
      html+=Utilities.formatString('%s</tr><tr><td><th><td>%s</tr></td>',item++,vA[i][j]);
    }
  }
}
html+='</table>';
至:
var html = '<table style="border-collapse: collapse; border: 2px solid black; width: 500px"><thead><tr style="border-collapse: collapse; border: 2px solid black"><th style="border-collapse: collapse; border: 2px solid black; background-color: #008000;"><font color="#FFFFFF">No</font></th><th style="border-collapse: collapse; border: 2px solid black; background-color: #008000;"><font color="#FFFFFF">File name</font></th><th style="border-collapse: collapse; border: 2px solid black; background-color: #008000;"><font color="#FFFFFF">Link</font></th></tr></thead><tbody>';
filenames.forEach((e, i) => html += `<tr style="border-collapse: collapse; border: 2px solid black"><td style="border: 2px solid black">${i + 1}<\/td><td style="border-collapse: collapse; border: 2px solid black">${e}<\/td><td style="border-collapse: collapse; border: 2px solid black"><a href="${attachment[i]}">Link<\/a><\/td><\/tr>`);
html += '</tbody></table>';

结果:

使用上述修改后的脚本时,将创建以下 HTML 正文。在这种情况下,使用示例 URL。

<table style="border-collapse: collapse; border: 2px solid black; width: 500px"><thead><tr style="border-collapse: collapse; border: 2px solid black"><th style="border-collapse: collapse; border: 2px solid black; background-color: #008000;"><font color="#FFFFFF">No</font></th><th style="border-collapse: collapse; border: 2px solid black; background-color: #008000;"><font color="#FFFFFF">File name</font></th><th style="border-collapse: collapse; border: 2px solid black; background-color: #008000;"><font color="#FFFFFF">Link</font></th></tr></thead><tbody><tr style="border-collapse: collapse; border: 2px solid black"><td style="border: 2px solid black">1</td><td style="border-collapse: collapse; border: 2px solid black">Sheet1.csv</td><td style="border-collapse: collapse; border: 2px solid black"><a href="https://drive.google.com/uc?export=download&id=sample">Link</a></td></tr><tr style="border-collapse: collapse; border: 2px solid black"><td style="border: 2px solid black">2</td><td style="border-collapse: collapse; border: 2px solid black">Sheet2.csv</td><td style="border-collapse: collapse; border: 2px solid black"><a href="https://drive.google.com/uc?export=download&id=sample">Link</a></td></tr><tr style="border-collapse: collapse; border: 2px solid black"><td style="border: 2px solid black">3</td><td style="border-collapse: collapse; border: 2px solid black">Sheet3.csv</td><td style="border-collapse: collapse; border: 2px solid black"><a href="https://drive.google.com/uc?export=download&id=sample">Link</a></td></tr></tbody></table>


推荐阅读