使用应用程序脚本将 table 个图表从 google 个电子表格发送到 slack
Sending table charts from google spreadsheet to slack using apps script
我正在尝试每天从我的 google 电子表格向我的 Slack 频道发送 table 图表。当我创建一些普通图表时,自动化工作 - 例如柱形图或折线图 - 但如果我用 table 图表 尝试同样的事情,它会显示错误。我是否应该更改我的任何代码以获得此 运行?
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
(User) chat:write
files:write
我的 table 图表看起来像这样。它完美地显示在我的电子表格文件中。
问题和解决方法:
我也遇到过和你一样的情况。在当前阶段,table 图表似乎无法作为图像 blob 直接检索。这可能是当前的规范。因此,作为当前的解决方法,我想提出以下流程。在此解决方法中,Google Slides 用作包装器。顺便说一句,在您的脚本中,使用了 getAs('image/jpeg')
。但是好像用了setName("graph.png")
。所以在这个修改中,mimeType 使用文件名中的 image/png
。
- 从 Google 电子表格中检索 table 图表。
- 创建新的 Google 幻灯片作为临时文件。
- 将 table 图表从 Google 电子表格插入到 Google 幻灯片。
- 检索 Google 幻灯片上插入的图表作为图像 blob。
- 删除临时 Google 幻灯片。
- 将 blob 用于 Slack API。
通过此流程,可以将 table 图表作为图像 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
参考:
我正在尝试每天从我的 google 电子表格向我的 Slack 频道发送 table 图表。当我创建一些普通图表时,自动化工作 - 例如柱形图或折线图 - 但如果我用 table 图表 尝试同样的事情,它会显示错误。我是否应该更改我的任何代码以获得此 运行?
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
(User) chat:write
files:write
我的 table 图表看起来像这样。它完美地显示在我的电子表格文件中。
问题和解决方法:
我也遇到过和你一样的情况。在当前阶段,table 图表似乎无法作为图像 blob 直接检索。这可能是当前的规范。因此,作为当前的解决方法,我想提出以下流程。在此解决方法中,Google Slides 用作包装器。顺便说一句,在您的脚本中,使用了 getAs('image/jpeg')
。但是好像用了setName("graph.png")
。所以在这个修改中,mimeType 使用文件名中的 image/png
。
- 从 Google 电子表格中检索 table 图表。
- 创建新的 Google 幻灯片作为临时文件。
- 将 table 图表从 Google 电子表格插入到 Google 幻灯片。
- 检索 Google 幻灯片上插入的图表作为图像 blob。
- 删除临时 Google 幻灯片。
- 将 blob 用于 Slack API。
通过此流程,可以将 table 图表作为图像 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