【问题标题】:How to upload Google Spreadsheet chart to Slack channel如何将 Google 电子表格图表上传到 Slack 频道
【发布时间】:2017-09-05 10:51:19
【问题描述】:

我正在为我的 Google 电子表格编写应用脚本,我想知道如何将图表作为图像附件发送到 Slack?

这是获取图表的函数:

function getChart(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var chart = sheet.getCharts()[0];
  var pic = chart.getAs('image/png');
  if (chart){
    msg(pic);
    return pic;
  }
}

这是我的“dashbot”功能,它向 slack 发送短信:

function dashbot() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var content = {"channel": "XXX", //edit
                 "username": "XXX",
                 "text": "XXX"};
  var params = {
     "method": "post",
     "payload": JSON.stringify(content)
   };
   UrlFetchApp.fetch('https://hooks.slack.com/XXXXX', params)
}

有什么想法可以推进吗?

【问题讨论】:

标签: google-apps-script google-sheets slack-api


【解决方案1】:

这个示例脚本怎么样?正如@Erik Kalkoken 所说,文件不能使用 Webhook 直接上传到 Slack。因此,当文件上传到 Slack 时,必须使用 URL。使用 URL 上传文件后,即使文件被删除,Slack 上的文件也不会被删除。我准备了一个示例脚本来反映这一点。

脚本流程如下。

流程:

  1. 获取图表
  2. 将图表转换为 png 格式的图像块
  3. 将图像 blob 保存为文件
  4. 修改文件权限为打开
  5. 检索文件的 URL
  6. 使用 URL 发布负载
  7. 修改文件权限为关闭

在此脚本中,uloaded 文件位于 Google Drive 的根目录中。即使文件被删除,Slack 上的文件也不会被删除。

示例脚本:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var chart = sheet.getCharts()[0];
  if (chart) {
    var pic = chart.getAs('image/png');
    var file = DriveApp.createFile(pic).setName("sampleimage.png");
    file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); // Modify file permission to the open.
    var content = {
      "channel":"XXX",
      "username":"XXX",
      "text":"XXX",
      "attachments":[{"image_url": "http://drive.google.com/uc?export=download&id=" + file.getId()}]
    };
    var res = UrlFetchApp.fetch(
      "https://hooks.slack.com/XXXXX",
      {
        method: "post",
        payload: JSON.stringify(content),
        muteHttpExceptions: true,
      }).getContentText();
    Utilities.sleep(3000); // Wait for until reading image file from Slack.
    file.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE); // Modify file permission to the close.
  }
}

如果这对你没有用,我很抱歉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多