如何创建一个将电子表格作为Excel文件附加的应用脚本,并将其通过电子邮件发送到某个电子邮件地址?
Stackoverflow上有一些关于如何执行此操作的较旧帖子,但它们现在似乎已过时且不似乎有效。
谢谢。
答案 0 :(得分:5)
看起来@Christiaan Westerbeek的回答是现实的,但自从他的帖子开始已经过去了一年,我认为他上面提到的剧本需要进行一些修改。
var url = file.exportLinks[MimeType.MICROSOFT_EXCEL];
这行代码有问题,可能exportLinks
现已折旧。当我执行他的代码时,它给出了以下效果的错误:
TypeError:无法从undefined中读取属性“
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
”。
解决方法如下:
上面一行代码中的网址基本上是“下载为xlsx”网址,可用于直接将电子表格下载为您从File> Download as > Microsoft Excel (.xlsx)
获取的xlsx文件
格式为:
https://docs.google.com/spreadsheets/d/<<<ID>>>/export?format=xlsx&id=<<<ID>>>
其中&lt;&lt;&gt;&gt;应该替换为您的文件的ID。
选中here,轻松了解如何从Google工作表的网址中提取ID。
答案 1 :(得分:3)
这是一个最新的工作版本。此Google Apps脚本工作的一个先决条件是必须启用Drive API v2 Advanced Google Service。通过资源 - &gt;在您的Google Apps脚本中启用它高级Google服务... - &gt; Drive API v2 - &gt;上。然后,该窗口将告诉您,您必须还在Google Developers Console中启用此服务。点击链接并在那里启用服务!完成后,只需使用此脚本。
/**
* Thanks to a few answers that helped me build this script
* Explaining the Advanced Drive Service must be enabled: http://stackoverflow.com/a/27281729/1385429
* Explaining how to convert to a blob: http://ctrlq.org/code/20009-convert-google-documents
* Explaining how to convert to zip and to send the email: http://ctrlq.org/code/19869-email-google-spreadsheets-pdf
* New way to set the url to download from by @tera
*/
function emailAsExcel(config) {
if (!config || !config.to || !config.subject || !config.body) {
throw new Error('Configure "to", "subject" and "body" in an object as the first parameter');
}
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = spreadsheet.getId()
var file = Drive.Files.get(spreadsheetId);
var url = 'https://docs.google.com/spreadsheets/d/'+spreadsheetId+'/export?format=xlsx';
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + token
}
});
var fileName = (config.fileName || spreadsheet.getName()) + '.xlsx';
var blobs = [response.getBlob().setName(fileName)];
if (config.zip) {
blobs = [Utilities.zip(blobs).setName(fileName + '.zip')];
}
GmailApp.sendEmail(
config.to,
config.subject,
config.body,
{
attachments: blobs
}
);
}
更新:我更新了设置要下载的网址的方式。通过file.exportLinks集合执行它不再有效。感谢@tera在他的回答中指出了这一点。