Google apps script 使用应用程序脚本通过电子邮件从谷歌电子表格发送图表
我到处寻找答案,但运气不好。有一个谷歌电子表格,它使用应用程序脚本连接到数据库,将一些原始数据拉入电子表格。然后,我使用各种电子表格公式来处理这些数据,然后最终创建一个图表 我的下一个挑战是,我希望能够通过应用程序脚本将该图表嵌入到电子邮件中,并将其作为HTML电子邮件发送 这是可能的还是我应该开始寻找其他解决方案 谢谢Google apps script 使用应用程序脚本通过电子邮件从谷歌电子表格发送图表,google-apps-script,html-email,Google Apps Script,Html Email,我到处寻找答案,但运气不好。有一个谷歌电子表格,它使用应用程序脚本连接到数据库,将一些原始数据拉入电子表格。然后,我使用各种电子表格公式来处理这些数据,然后最终创建一个图表 我的下一个挑战是,我希望能够通过应用程序脚本将该图表嵌入到电子邮件中,并将其作为HTML电子邮件发送 这是可能的还是我应该开始寻找其他解决方案 谢谢 Mikael这是我用来给图表发送电子邮件的代码。 请注意,您需要为每个人提供电子表格的链接访问权限。如果没有,您将在电子邮件中看到一个图像,说明用户未登录。(非常恼人的是,没有
Mikael这是我用来给图表发送电子邮件的代码。 请注意,您需要为每个人提供电子表格的链接访问权限。如果没有,您将在电子邮件中看到一个图像,说明用户未登录。(非常恼人的是,没有解决方法)
功能电子邮件图表(工作表、电子邮件、电子邮件主题){
var charts=sheet.getCharts();
if(charts.length==0){
MailApp.sendmail({
收件人:电子邮件,
主题:“错误:”+电子邮件主题,
htmlBody:“电子表格中没有图表”});
返回;
}
var chartBlobs=新数组(charts.length);
var emailBody=“Charts
”;
var emailImages={};
对于(var i=0;i将电子表格公开并运行脚本。脚本的修改版本粘贴在下面并带有注释
enter code here function
emailCharts(sheet,emails,emailSubject){
var targetspreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // Active spreadsheet of the key file
var sheet = targetspreadsheet.getSheetByName('Sheet1'); // Change the sheet name
var emailSubject = 'test';
var emails = 'test@test.com'; // your email ID
var charts = sheet.getCharts();
if(charts.length==0){
MailApp.sendEmail({
to: emails,
subject: "ERROR:"+emailSubject,
htmlBody: "No charts in the spreadsheet"});
return;
}
var chartBlobs=new Array(charts.length);
var emailBody="Charts<br>";
var emailImages={};
for(var i=0;i<charts.length;i++){
var builder = charts[i].modify();
builder.setOption('vAxis.format', '#');
var newchart = builder.build();
chartBlobs[i]= newchart.getAs('image/png');
emailBody= emailBody + "<p align='center'><img src='cid:chart"+i+"'></p>";
emailImages["chart"+i]= chartBlobs[i];
}
MailApp.sendEmail({
to: emails,
subject: emailSubject,
htmlBody: emailBody,
inlineImages:emailImages});
}
在此处输入代码函数
电子邮件图表(表格、电子邮件、电子邮件主题){
var targetspreadsheet=SpreadsheetApp.getActiveSpreadsheet();//关键文件的活动电子表格
var sheet=targetspreadsheet.getSheetByName('Sheet1');//更改工作表名称
var emailSubject=‘test’;
风险价值test@test.com“;//您的电子邮件ID
var charts=sheet.getCharts();
if(charts.length==0){
MailApp.sendmail({
收件人:电子邮件,
主题:“错误:”+电子邮件主题,
htmlBody:“电子表格中没有图表”});
返回;
}
var chartBlobs=新数组(charts.length);
var emailBody=“Charts
”;
var emailImages={};
对于(var i=0;i由于该服务似乎只是SpreadsheetApp
服务中使用的部分实现,因此并非所有的图表类型和选项都已实现,这意味着图表的呈现方式可能与Google Sheets中的不同。下面前面答案的修改版本将意味着电子邮件中将包含图表由于此解决方案还使用脚本生成的身份验证令牌,因此不必更改谷歌工作表上的查看权限
// Based on https://stackoverflow.com/a/22200230/1027723
function emailChartUsingImageUrl(){
const idt = SpreadsheetApp.getActive().getId();
const sheet = SpreadsheetApp.getActiveSheet();
const charts = sheet.getCharts();
// setup some variables for our email
const chartBlobs = new Array();
const emailImages = {};
let emailBody = "Charts<br>";
// setup our call to fetch the chart image
const token = ScriptApp.getOAuthToken(); // project requires https://www.googleapis.com/auth/spreadsheets scope
const baseUrl = `https://docs.google.com/spreadsheets/d/${idt}/embed/oimg?access_token=${token}&disposition=ATTACHMENT&bo=false&filetype=png&oid=`;
// for each chart fetch the download image as a blob and appended to our email body
charts.forEach(function(chart, i){
// NEW BIT
const url = baseUrl + chart.getChartId();
chartBlobs[i] = UrlFetchApp.fetch(url).getBlob();
emailBody += "<p align='center'><img src='cid:chart"+i+"'></p>";
emailImages["chart"+i]= chartBlobs[i];
});
// Send email with inline images
MailApp.sendEmail({
to: "me@example.com",
subject: "Email Charts - get chart from image url",
htmlBody: emailBody,
inlineImages:emailImages});
}
//基于https://stackoverflow.com/a/22200230/1027723
函数emailChartUsingImageUrl(){
const idt=SpreadsheetApp.getActive().getId();
const sheet=SpreadsheetApp.getActiveSheet();
const charts=sheet.getCharts();
//为我们的电子邮件设置一些变量
const chartBlobs=新数组();
const emailImages={};
让emailBody=“Charts
”;
//设置调用以获取图表图像
const token=ScriptApp.getOAuthToken();//项目需要https://www.googleapis.com/auth/spreadsheets 范围
常量baseUrl=`https://docs.google.com/spreadsheets/d/${idt}/embed/oimg?access_-token=${token}&disposition=ATTACHMENT&bo=false&filetype=png&oid=`;
//对于每个图表,获取下载图像作为一个blob并附加到我们的电子邮件正文中
图表。forEach(函数(图表,i){
//新钻头
const url=baseUrl+chart.getChartId();
chartBlobs[i]=UrlFetchApp.fetch(url.getBlob();
emailBody+=“”;
emailImages[“chart”+i]=chartBlobs[i];
});
//发送带有内联图像的电子邮件
MailApp.sendmail({
至:me@example.com",
主题:“电子邮件图表-从图像url获取图表”,
htmlBody:emailBody,
inlineImages:emailImages});
}
将其作为图像类型嵌入电子邮件或交互式图表中?您搜索得不太好,在此论坛上进行简单搜索会返回一些结果。示例:您发送给我的示例实际上并没有回答我的问题,问题是相同的,但所用的方法不是我想要实现的。我已经知道如何不断改进cr使用数据表创建图表我想知道是否可以访问电子表格中的现有图表…是否尝试使用图表创建图表。newDataTable()在发送电子邮件的脚本中,然后将此图表对象添加到电子邮件的HTMLbody?可能您必须使用此功能才能将图表转换为图像。查看图表的部分。我尝试运行此脚本,发送的电子邮件中只包含空图表。您是否需要对g执行特殊操作让这个工作正常吗?确保每个有链接的人都可以访问电子表格。在电子邮件客户端中,你当然需要接受图像的下载。有些图表在发送电子邮件时显示得不同,但我没有遇到过空白图表。感谢回复,我只是以自己的身份进行测试,所以访问不是问题。可以吗您是否运行调试以查找电子邮件呼叫中使用的属性值?我也有此问题。您必须启用“链接共享”(“任何具有链接的人都可以查看”)。
// Based on https://stackoverflow.com/a/22200230/1027723
function emailChartUsingImageUrl(){
const idt = SpreadsheetApp.getActive().getId();
const sheet = SpreadsheetApp.getActiveSheet();
const charts = sheet.getCharts();
// setup some variables for our email
const chartBlobs = new Array();
const emailImages = {};
let emailBody = "Charts<br>";
// setup our call to fetch the chart image
const token = ScriptApp.getOAuthToken(); // project requires https://www.googleapis.com/auth/spreadsheets scope
const baseUrl = `https://docs.google.com/spreadsheets/d/${idt}/embed/oimg?access_token=${token}&disposition=ATTACHMENT&bo=false&filetype=png&oid=`;
// for each chart fetch the download image as a blob and appended to our email body
charts.forEach(function(chart, i){
// NEW BIT
const url = baseUrl + chart.getChartId();
chartBlobs[i] = UrlFetchApp.fetch(url).getBlob();
emailBody += "<p align='center'><img src='cid:chart"+i+"'></p>";
emailImages["chart"+i]= chartBlobs[i];
});
// Send email with inline images
MailApp.sendEmail({
to: "me@example.com",
subject: "Email Charts - get chart from image url",
htmlBody: emailBody,
inlineImages:emailImages});
}