Google apps script 次轴未显示在嵌入的图表图像中Google Sheets脚本
我有一些代码可以发送包含电子表格中图形图像的电子邮件,但是其中一个具有次轴的图形只发送具有左轴的图形,而不包括右轴。我已经看到一些建议,这是一个错误,但可能有一个解决办法,可以建议吗?谢谢。这是我的代码(图[4]是左右轴的图表):Google apps script 次轴未显示在嵌入的图表图像中Google Sheets脚本,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一些代码可以发送包含电子表格中图形图像的电子邮件,但是其中一个具有次轴的图形只发送具有左轴的图形,而不包括右轴。我已经看到一些建议,这是一个错误,但可能有一个解决办法,可以建议吗?谢谢。这是我的代码(图[4]是左右轴的图表): var sheetSummary=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“摘要”); var chartIndex=[4,0,1,2,3]; var charts=sheetSummary.getCh
var sheetSummary=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“摘要”);
var chartIndex=[4,0,1,2,3];
var charts=sheetSummary.getCharts();
var emailImages={};
var=”;
chartIndex.forEach(i=>{
emailChart+=“”;
emailImages[“chart”+i]=charts[i].getAs(“image/png”).setName(“chartBlob”+i);
});
在你的情况下,我认为这种方法可能有用。在这个线程中,当从电子表格上的图表中检索blob时,blob就是损坏的图表。为了避免这个问题,我建议使用谷歌幻灯片
但是,当我看到您的脚本时,我认为将此方法包含到脚本中可能有点复杂。所以,在这个答案中,我提出了一个使用上述方法对脚本进行修改的脚本
修改脚本:
var sheetSummary=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“摘要”);
var chartIndex=[4,0,1,2,3];
var charts=sheetSummary.getCharts();
var emailImages={};
var=”;
//我修改了下面的脚本。
// 1. 将谷歌幻灯片创建为临时幻灯片。
var slides=SlidesApp.create(“temp”);
var slide=slides.getSlides()[0];
chartIndex.forEach(i=>{
emailChart+=“”;
//2.将图表放到谷歌幻灯片上。
var image=slide.insertSheetsChartAsImage(图表[i]);
//3.从谷歌幻灯片中检索图表的blob。
emailImages[“chart”+i]=image.getAs(“image/png”).setName(“chartBlob”+i);
//4.从谷歌幻灯片中删除图表。
image.remove();
});
// 5. 删除谷歌幻灯片。
DriveApp.getFileById(slides.getId()).setTrashed(true);
参考资料:
- 相关线程。
它似乎正在发送同一图表的旧版本,这很奇怪。
。因为当我测试这个修改后的脚本时,没有出现任何问题。我为这种情况道歉。但是,我想确认一下你的情况。那么,您能否提供用于复制您的问题的示例电子表格?或者,你能提供复制你的问题的详细流程吗?@George Bates我不得不为我的拙劣技能道歉。不幸的是,我无法复制您的情况,它似乎发送了相同图表的旧版本,这很奇怪。
。当我使用带有5个图表的工作表测试上述脚本时,可以在电子邮件中确认5个图表。我对这种情况深表歉意。因此,在这种情况下,我认为需要知道复制当前问题的方法。这是因为我的技术差。我再次为此深表歉意。
var sheetSummary = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Summary");
var chartIndex = [4,0,1,2,3];
var charts = sheetSummary.getCharts();
var emailImages = {};
var emailChart = "";
chartIndex.forEach(i => {
emailChart += "<p align='left'><img src='cid:chart" + i + "'>";
emailImages["chart" + i] = charts[i].getAs("image/png").setName("chartBlob" + i);
});
var sheetSummary = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Summary");
var chartIndex = [4,0,1,2,3];
var charts = sheetSummary.getCharts();
var emailImages = {};
var emailChart = "";
// I modified below script.
// 1. Create Google Slides as a temporal.
var slides = SlidesApp.create("temp");
var slide = slides.getSlides()[0];
chartIndex.forEach(i => {
emailChart += "<p align='left'><img src='cid:chart" + i + "'>";
// 2. Put the chart to Google Slides.
var image = slide.insertSheetsChartAsImage(charts[i]);
// 3. Retrieve the blob of the chart from Google Slides.
emailImages["chart" + i] = image.getAs("image/png").setName("chartBlob" + i);
// 4. Remove the chart from Google Slides.
image.remove();
});
// 5. Remove the Google Slides.
DriveApp.getFileById(slides.getId()).setTrashed(true);