Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 为特定工作表创建CSV文件,然后发送带有表格的电子邮件(文件名和链接)_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 为特定工作表创建CSV文件,然后发送带有表格的电子邮件(文件名和链接)

Google apps script 为特定工作表创建CSV文件,然后发送带有表格的电子邮件(文件名和链接),google-apps-script,google-sheets,Google Apps Script,Google Sheets,任何人谁能带来一些关于以下的光,我已经在整个星期的工作,我几乎在那里,我只有一个或两个问题。首先,电子邮件中表格的格式,如您所见,在所附的屏幕截图中,它没有正确对齐,No上升到6,而它应该在3停止,同样,我无法显示边框。其次,我不知道我是否采取了正确的方法来推送文件名和链接数组,以便使用var vA=[attachment,filenames]创建一个新的数组(数组),在表中使用它是正确的方法吗? 最后,是否可以将电子邮件的html正文重新使用到showModalDialog,以便用户知道操作已

任何人谁能带来一些关于以下的光,我已经在整个星期的工作,我几乎在那里,我只有一个或两个问题。首先,电子邮件中表格的格式,如您所见,在所附的屏幕截图中,它没有正确对齐,
No
上升到6,而它应该在3停止,同样,我无法显示边框。其次,我不知道我是否采取了正确的方法来推送文件名和链接数组,以便使用
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
}

代码:

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
}
功能测试(){
//为这些示例图纸名称创建CSV文件
var mySheets=['Sheet1','Sheet2','Sheet3'];
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheets=ss.getSheets();
var附件=[];
var文件名=[];
var folder=“ID HERE”;
对于(变量i=0;i对于(var i=0;i我相信你的目标如下

  • 您希望使用GoogleApps脚本实现HTML主体作为问题中显示的底部图像的表格
对于这个问题,这个答案如何?在这个答案中,我想建议修改您的HTML

修改脚本: 修改脚本时,请按以下方式修改

发件人:
var html='th,td{border:2px纯黑色;}NoLinkClass';
var项目=1;

对于(var i=0;i html+=`${i+1}${e}2Sheet2.csv3Sheet3.csv
我相信您的目标如下

  • 您希望使用GoogleApps脚本实现HTML主体作为问题中显示的底部图像的表格
对于这个问题,这个答案如何?在这个答案中,我想建议修改您的HTML

修改脚本: 修改脚本时,请按以下方式修改

发件人:
var html='th,td{border:2px纯黑色;}NoLinkClass';
var项目=1;

对于(var i=0;i html+=`${i+1}${e}2Sheet2.csv3Sheet3.csv
我认为这不是一个好主意
var vA=[attachment,filename]
我想我更喜欢使用对象和对象数组。
vA[i]={attachment:'',filename:'}
我认为这不是一个好主意
var vA=[attachment,filename]
我想我更喜欢使用和数组对象。
vA[I]={附件:“”,文件名:'}
谢谢你的回答,我已经用你的建议替换了我的代码,我在这行
文件名中得到了一个错误。forEach((e,I)=.
(语法错误)有什么我遗漏的吗?Thanks@Nabnub感谢您的回复。对于给您带来的不便,我深表歉意。关于错误消息,我认为您可能正在使用不带V8运行时的脚本。当您使用不带V8运行时的脚本时,请在脚本编辑器中启用V8运行时,然后重试。非常感谢,我以为在中默认启用了它我的项目。我现在已经启用了它,它似乎可以正常工作。你能给我一些提示吗:在我的问题中,我在var mySheets=['Sheet1','Sheet2','Sheet3'上运行脚本;,但实际上,我用我已经创建的侧栏收集工作表名称,用户可以在其中选择要导出为CSV的工作表。我的问题是:当用户单击“提交”时,如何在侧栏中显示微调器,以便用户了解任务已开始?@Nabnub感谢您的回答。我很高兴您的问题是:已解决。我想支持你。但你的评论问题是新问题,这与你的问题不同。因此,你可以通过包含详细信息将其作为新问题发布吗?因为当你的初始问题被评论更改时,看到你的问题的其他用户会感到困惑。通过将其作为新问题发布,用户包括ng me可以考虑你的新问题。如果你能合作解决你的新问题,我很高兴。非常感谢你的持续和巨大支持。我将首先尝试研究,看看我能做些什么。非常感谢你的帮助。谢谢你的回答,我已经用你的建议替换了我的代码,我得到了这行
文件的一个错误name.forEach((e,i)=.
(语法错误)有什么我遗漏的吗?Thanks@Nabnub感谢您的回复。对于给您带来的不便,我深表歉意。关于错误消息,我认为您可能正在使用不带V8运行时的脚本。当您使用不带V8运行时的脚本时,请在脚本编辑器中启用V8运行时,然后重试。非常感谢,我以为在中默认启用了它我的项目。我现在启用了它,而且
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>';