Google apps script 次轴未显示在嵌入的图表图像中Google Sheets脚本

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

我有一些代码可以发送包含电子表格中图形图像的电子邮件,但是其中一个具有次轴的图形只发送具有左轴的图形,而不包括右轴。我已经看到一些建议,这是一个错误,但可能有一个解决办法,可以建议吗?谢谢。这是我的代码(图[4]是左右轴的图表):

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);

参考资料:
  • 相关线程。

通过猜测您的情况,我提出了一个答案。你能确认一下吗?如果我误解了您的情况,并且这不是您期望的方向,我道歉。您好@Tanaike,它仍然没有解决问题。不幸的是,事实上它似乎发送了同一图表的旧版本,这很奇怪。@George Bates感谢您的回复。对于给您带来的不便和我糟糕的英语水平,我深表歉意。不幸的是,我无法理解
它似乎正在发送同一图表的旧版本,这很奇怪。
。因为当我测试这个修改后的脚本时,没有出现任何问题。我为这种情况道歉。但是,我想确认一下你的情况。那么,您能否提供用于复制您的问题的示例电子表格?或者,你能提供复制你的问题的详细流程吗?@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);