【问题标题】:Chart image in email from Google spreadsheet with google-apps-script returns white image来自带有 google-apps-script 的 Google 电子表格的电子邮件中的图表图像返回白色图像
【发布时间】:2016-01-27 05:45:34
【问题描述】:

我每晚都会向我自己的 gmail 地址发送一份报告。突然之间,大约一周后,图表的图像变成了空白。只有一张图表。

function sendReport() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("monthData");
  var charts = sheet.getCharts();

  if(charts.length > 0) {
    var template = HtmlService.createTemplateFromFile("reportTemplate");
    template.date = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd-MM-y");
    var areaBlob = charts[0].getBlob().getAs('image/png').setName("areaBlob");
    MailApp.sendEmail({ to:"olivier.dejonge@gmail.com",
                        subject: "Trend uren declarabel",
                        htmlBody: template.evaluate().getContent(),
                        inlineImages: {
                          chart: areaBlob
                        }
                      });
  }else {
    Browser.msgBox("Kon report niet verzenden omdat ik chart niet kon vinden");
  }
}

代码.gs

<html>
  <h1>Dagelijkse Trend Declarabele uren: <?= date ?></h1>
  <p>
    <img src="cid:chart" />
  </p>
</html>

reportTemplate.html

在电子表格中看起来不错

在电子邮件中它不存在!?

更新

当我使用电子表格的“updateUren”函数更新数据时,图表也保持空白。

function updateUren()
{
  var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var startYear = activeSpreadSheet.getSheetByName("settings").getRange(2,1,1,1).getValue();
  var endYear = activeSpreadSheet.getSheetByName("settings").getRange(2,2,1,1).getValue();
  var calendars = activeSpreadSheet.getSheetByName("settings").getRange(2,3,1,1).getValue().split("/");
  var hourPriceArr = activeSpreadSheet.getSheetByName("settings").getRange(2,4,1,1).getValue().split("/");
  var myPrice = hourPriceArr[0].split(",");
  var myHourPrice = [];
  for(var i=0 ; i < myPrice.length; i++) {
    var orgPrice = myPrice[i].split(":");
    myHourPrice.push(orgPrice)
  }
  var vasilesPrice = hourPriceArr[1].split(",");
  var vasileHourPrice = [];
  for(var i=0 ; i < vasilesPrice.length ; i++) {
    vasileHourPrice.push(vasilesPrice[i].split(":"))
  }
  var hourHash = [{hourPrice:myHourPrice, hirePrice:[]}, {hourPrice:myHourPrice, hirePrice:vasileHourPrice}]

  var startDate = new Date();
  var details=[]; 

  for(var i in calendars)
  {
    startDate = collectEvents_(details, calendars[i], startYear, endYear, startDate, hourHash[i].hourPrice, hourHash[i].hirePrice);
  }

  /*month*/
  var monthDetails = getMonthDetails_(details); 

  sheet = activeSpreadSheet.getSheetByName("monthData");
  var range = sheet.getRange("A2:E")
  range.clear();
  sheet.getRange(2, 1, monthDetails.length, 5).setValues(monthDetails);


  /*all*/
  details.unshift(["title", "date", "start", "end", "duration", "profit"]);
  sheet = activeSpreadSheet.getSheetByName("data");
  sheet.clear();
  sheet.getRange(2, 1, details.length, 6).setValues(details);
}

只有当我在浏览器中刷新页面时,图表才会再次显示它的图表。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    空白图片是由于共享权限问题。将电子表格的共享设置更改为“知道链接的任何人都可以查看”,然后图表就可以从您的脚本中导出。

    【讨论】:

    • 你让我开心,谢谢!很遗憾我必须将其设为“半公开”,但我认为这是理所当然的。
    【解决方案2】:

    不确定为什么它会停止工作,但您可能想尝试删除“getBlob()”部分,看看是否有帮助。文档表明以下代码应该可以工作。

    var areaBlob = charts[0].getAs('image/png').setName("areaBlob");
    

    https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart#getAs(String)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多