【问题标题】:Slack > Gsheet > VLookup > SlackSlack > Gsheet > VLookup > Slack
【发布时间】:2018-09-11 17:01:00
【问题描述】:

过去几周我一直在努力解决这个问题,所以我真的希望有人能帮助我解决这个问题。另外我对代码很陌生,这基本上激发了我对它的兴趣。

我正在尝试为 Google Sheet 编写一个 Google Apps 脚本,并将其链接到一个入站和出站 Slack webhook,这样我就可以在 Slack 中发布一个类似于 PO# 的命令,它会填写一个包含vlookup 列和数组公式的电子表格,然后我想在 Slack 中发回从Vlookup 中提取的数据。我最初有这个想法from this link

我已经非常接近了,但我不知道如何让脚本将Vlookup 数据发布到 Slack。这是它的外观照片,其中突出显示的单元格是vlookup 列:

然后是我正在处理的 Google Apps 脚本代码:

function doPost(req) {
  var sheets = SpreadsheetApp.openById('googlesheet_link');
  var params = req.parameters;

  var nR = getNextRow(sheets) + 1;

  if (params.token == "slack_webhook") {

    //ALREADY IN SHEETS
    var supplier

    // PROCESS TEXT FROM MESSAGE
    var textRaw = String(params.text).replace(/^\s*update\s*:*\s*/gi,'');
    var text = textRaw.split(/\s*;\s*/g);

    // FALL BACK TO DEFAULT TEXT IF NO UPDATE PROVIDED
    var project   = text[0] || "No Project Specified";
    var purchaseorder = text[1] || "No update provided";
    var today     = text[2] || "No update provided";
    var blockers  = text[3] || "No update provided";

    // RECORD TIMESTAMP AND USER NAME IN SPREADSHEET
    sheets.getRangeByName('timestamp').getCell(nR,1).setValue(new Date());
    sheets.getRangeByName('user').getCell(nR,1).setValue(params.user_name);

    // RECORD UPDATE INFORMATION INTO SPREADSHEET
    sheets.getRangeByName('project').getCell(nR,1).setValue(project);
    sheets.getRangeByName('purchaseorder').getCell(nR,1).setValue(purchaseorder);
    sheets.getRangeByName('today').getCell(nR,1).setValue(today);
    sheets.getRangeByName('blockers').getCell(nR,1).setValue(blockers);


    var channel = "updates";

    postResponse(channel,params.channel_name,project,params.user_name,purchaseorder,today,blockers,supplier);

  } else {
    return;
  }
}

function getNextRow(sheets) {
  var timestamps = sheets.getRangeByName("timestamp").getValues();
  for (i in timestamps) {
    if(timestamps[i][0] == "") {
      return Number(i);
      break;
    }
  }

  //AND THEN THIS IS THE RETURN//
  function postResponse(channel, srcChannel, project, userName, purchaseorder, today, blockers,supplier) {

  var payload = {
    "channel": "#" + channel,
    "username": "Trackbot3000",
    "icon_emoji": ":robot_face:",
    "link_names": 1,
    "attachments":[
       {
          "fallback": "This is an update from a Slackbot integrated into your organization. Your client chose not to show the attachment.",
          "pretext": "*" + project + "* posted an update for stand-up. (Posted by @" + userName + " in #" + srcChannel + ")",
          "mrkdwn_in": ["pretext"],
          "color": "#D00000",
          "fields":[
             {
                "title":"Yesterday",
                "value": purchaseorder,
                "short":false
             },
             {
                "title":"Today",
                "value": today,
                "short":false
             },
             {
                "title":"Blockers",
                "value": blockers,
                "short": false
             },
             {
                "title":"Supplier",
                "value": supplier,
                "short": false
             }
          ]
       }
    ]
  };

  var url = 'slack_webhook_link';
  var options = {
    'method': 'post',
    'payload': JSON.stringify(payload)
  };

  var response = UrlFetchApp.fetch(url,options);
}

【问题讨论】:

  • 欢迎。 Stack Snippet 只能用于在此站点上可执行的 HTML/CSS/JavaScript。
  • 您遇到了什么问题?有什么错误吗?这里没有任何代码试图从工作表上的任何位置获取任何值 - 只是一些设置值的代码。
  • @tehhowch 我没有收到任何错误,我想我只是缺少一些会拉取 vlookup 列的代码。基本上现在它只包含我第一次放入 slack 的信息 Slack>Gsheet>Slack。我需要它去 Slack>Gsheet>pull Vlookup column>slack。如果有帮助,我可以发布一个示例 Google 表格吗?
  • 不,不会的。您的代码已经向您展示了如何获取特定工作表和特定范围。您只需添加执行此操作的代码即可读取您的 vlookup 结果所在的范围(并且您需要 flush 缓冲区,以便在您调用该范围上的 getValue/s 之前计算公式)。
  • @tehhowch 看起来像:SpreadhsheetApp.flush();在函数 PostResponse 之前?

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


【解决方案1】:

我半解决了这个问题。我最终只使用 Google Script App 代码的第一部分将数据从 slack 填充到 google 表格中,并去掉了 //AND THEN THE IS THE RETURN// 部分。然后我为谷歌表中的 Vlookup 列使用了 IF 和 ArrayFormula。然后我使用automate.io作为一个新的行触发器将它发送回slack。以防万一其他人想要这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2022-01-12
    • 2016-12-26
    • 2017-09-04
    相关资源
    最近更新 更多