微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用应用程序脚本将谷歌电子表格中的表格图表发送到 slack 问题和解决方法:修改后的脚本:注意:参考:

如何解决使用应用程序脚本将谷歌电子表格中的表格图表发送到 slack 问题和解决方法:修改后的脚本:注意:参考:

我每天都在尝试将表格图表从我的 google 电子表格发送到我的 slack 频道。当我创建一些普通图表时,自动化工作 - 例如柱形图或折线图 - 但如果我用表格图表尝试同样的事情,它会显示错误。我应该更改任何代码以使其运行吗?

function myFunction(){
  var sheetUrl2 = "https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxx/edit#gid=xxxxx"
  var ss2 = SpreadsheetApp.openByUrl(sheetUrl2);
  var sheet2 = ss2.getSheetByName("MyDailySheet");
  var charts2 = sheet2.getCharts();
  var chartimage2 = charts2[0].getBlob().getAs('image/jpeg').setName("graph.png");

  sendSlack(chartimage2);
}
 
function sendSlack(chart){
  var url        = 'https://slack.com/api/files.upload';
  var token      = 'xoxp-xxxxxxxxxxxxxxxxxxxxxxxxxx';
  var channel    = '#general';
  
  var payload = {
    'token'      : token,'channels'   : channel,'file'       : chart,'filename'   : 'DailyUsers - Last 30 Days'
  };
  
  var params = {
    'method'  : 'post','payload' : payload
  };
    
  var response = UrlFetchApp.fetch(url,params);
}

错误信息:

Exception: Service Spreadsheets Failed while accessing document with id xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
myFunction  @ DailyChart02.gs:7

代码运行良好,并将图表发送到我的 slack 频道。

我的 slack 应用已授权以下令牌范围:(bot)chat:write chat:write.public files:write用户chat:write files:write

我的表格图表看起来像这样。它完美地显示在我的电子表格文件中。

enter image description here

解决方法

问题和解决方法:

我也遇到过和你一样的情况。在现阶段,似乎无法直接检索表格图表作为图像blob。这可能是当前的规范。因此,作为当前的解决方法,我想提出以下流程。在此解决方法中,Google 幻灯片用作包装器。顺便说一下,在您的脚本中,使用了 getAs('image/jpeg')。但似乎使用了 setName("graph.png")。因此,在此修改中,mimeType 使用文件名中的 image/png

  1. 从 Google 电子表格中检索表格图表。
  2. 创建新的 Google 幻灯片作为临时文件。
  3. 将表格图表从 Google 电子表格插入 Google 幻灯片。
  4. 在 Google 幻灯片上检索插入的图表作为图像 blob。
  5. 删除临时 Google 幻灯片。
  6. 将 blob 用于 Slack API。

通过此流程,可以将表格图表检索为图像 blob。当你的脚本修改后,变成如下。

修改后的脚本:

请修改myFunction()如下。

function myFunction(){
  var sheetUrl2 = "https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxx/edit#gid=xxxxx"
  var ss2 = SpreadsheetApp.openByUrl(sheetUrl2);
  var sheet2 = ss2.getSheetByName("MyDailySheet");
  var charts2 = sheet2.getCharts();
  
  // --- I added below script.
  var s = SlidesApp.create("temporalSlides");
  var chartImage2 = s.getSlides()[0].insertSheetsChartAsImage(charts2[0]).getBlob().setName("graph.png");
  DriveApp.getFileById(s.getId()).setTrashed(true);
  // ---

  sendSlack(chartImage2);
}

注意:

  • 在这种情况下,如何将其作为未来的请求报告给 Google 问题跟踪器? Ref

参考:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。