google-apps-script - 为特定工作表创建 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 脚本将 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>
推荐阅读
- java - 从 Firestore 读取嵌套对象时出现“RuntimeException:无法反序列化对象”
- powershell - 如果行包含来自变量 A OR B 的值,则从文件中排除
- html - 自定义复选框,无 Javascript,不更改 HTML,仅 CSS
- php - 获取 Icecat API 以获取产品信息
- jenkins - Jenkins 和 gradle - 使用最新版本的 CI 依赖项构建项目,用于生产的特定版本
- python - 将python变量插入prosgresql查询
- file - SSL - SecurityContext - 未处理的异常:FileSystemException:无法打开文件 - 错误:没有这样的文件或目录,errno = 2
- c# - 使用存储库时 where 条件生成不带过滤器的 sql
- python - 如何在 Ubuntu 14.04 (Mint 17) 上升级 numpy 版本
- string - 使用 gnuplot 将字符串绘制到表格中