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

时间:2021-05-01 09:31:36

标签: google-apps-script outlook

我想使用 Google 电子表格中的 Google App 脚本通过 Outlook 邮件仅发送特定工作表的一个标签。

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

我想要什么 在电子表格List sheet的多个tab中,sheet 33到A1: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);
  }```

1 个答案:

答案 0 :(得分:0)

问题:

您使用的是旧的导出网址 (https://docs.google.com/feeds/...),我认为这不能再使用了。此外,您提供的是电子表格名称而不是 id

解决方案:

导出 URL 应该是这样的:

<块引用>

var url = "https://docs.google.com/spreadsheets/d/" + 电子表格 ID + "/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) 将所需范围复制到新的临时工作表,(2) 导出该工作表,(3) 删除该工作表。例如,参见this answer
相关问题