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.
我只想使用 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.