Google-电子表格脚本:发送附有电子表格 XLS 的 outlook 电子邮件

Google-Spreadsheet Script: Send outlook Email with attached XLS of Spreadsheet

我只想使用 Google Spreadsheet.

中的 Google App 脚本通过 Outlook 邮件发送特定 sheet 的一个标签

我搜索并编写了脚本,但它太旧而无法工作或出现错误。

我想要什么 在spreadsheet的Listsheet的多个tab中,从sheet33到columnA1:M的数据被保存为.xls中的“values”并附加到Outlook邮件和发送

以及如何在 new Date() 中为今天的日期添加一天?

如果有高手能帮帮我,那就帮大忙了

谢谢。

function sendEmail(){

        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet=ss.getSheetByName("Sheet33");
        var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss.getSheetName() + "&exportFormat=xlsx";

        var d = Utilities.formatDate(new Date(), "GMT+9", "yyyyMMdd");
             

    var token         = ScriptApp.getOAuthToken();
    
    var response      = UrlFetchApp.fetch(url, {
      headers: {
        'Authorization': 'Bearer ' +  token
    
    },
          muteHttpExceptions: true
      
    });

  var blobs   = [response.getBlob().setName(ss.getSheetName() + ".xlsx")];

  var receipient = "khan@abc.com"
  var subject = "Date_"+ d + ss.getSheetName() +" List share."
  var emailbody = "Date_"+ d + ss.getSheetName() +" List share.\nThanks."

  MailApp.sendEmail(receipient, subject, emailbody, {attachments: blobs});

  Browser.msgBox("Date_"+ d + ss.getSheetName() + " Send Mail Complete.", Browser.Buttons.OK);
  }```

问题:

您正在使用旧的导出 URL (https://docs.google.com/feeds/...),我认为这不能再使用了。此外,您提供的是 spreadsheet 名称而不是 id.

解决方案:

导出 URL 应该是这样的:

var url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/export?format=xlsx&gid=" + sheetId;

代码片段:

function sendEmail(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheetId = ss.getId();
  var sheet = ss.getSheetByName("Sheet33");
  var range = sheet.getRange("A1:M");
  var tempSheet = ss.insertSheet("My temporary Sheet");
  range.copyTo(tempSheet.getRange("A1:M"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var tempSheetId = tempSheet.getSheetId();
  var url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/export?format=xlsx&gid=" + tempSheetId;
  var tomorrow = new Date();
  tomorrow.setDate(new Date().getDate() + 1);
  var d = Utilities.formatDate(tomorrow, "GMT+9", "yyyyMMdd");             
  var token = ScriptApp.getOAuthToken();    
  var response = UrlFetchApp.fetch(url, {
    headers: {
      'Authorization': 'Bearer ' +  token  
    },
    muteHttpExceptions: true   
  });
  var blobs = [response.getBlob()];
  var receipient = "khan@abc.com";
  var spreadsheetName = ss.getName();
  var subject = "Date_"+ d + spreadsheetName +" List share."
  var emailbody = "Date_"+ d + spreadsheetName +" List share.\nThanks."
  MailApp.sendEmail(receipient, subject, emailbody, {attachments: blobs});
  ss.deleteSheet(tempSheet);
  Browser.msgBox("Date_"+ d + spreadsheetName + " Send Mail Complete.", Browser.Buttons.OK);
}

备注:

  • 为了给你的约会增加一天,你可以做类似 this 的事情。这就是我在上面的示例中所做的。
  • 在此示例中,导出了整个 Sheet33。如果您想导出特定范围,则应 (1) 将所需范围复制到新的临时 sheet,(2) 导出 sheet,(3) 删除 sheet .参见,例如,this answer.