Slack> Gsheet> VLookup> Slack - PullRequest
       45

Slack> Gsheet> VLookup> Slack

0 голосов
/ 11 сентября 2018

Я боролся с этим последние пару недель, поэтому я очень надеюсь, что кто-нибудь сможет мне помочь с этим. Также я очень новичок в коде, это в основном вызвало мой интерес к нему.

Я пытаюсь написать скрипт Google Apps для Google Sheet и связать его с входящим и исходящим веб-крючком Slack, чтобы я мог опубликовать в Slack команду, подобную PO #, и она заполнится электронная таблица, в которую встроены vlookup столбцы с формулой массива, затем я хочу опубликовать в Slack, какие данные были извлечены из Vlookup. У меня изначально была идея по этой ссылке .

Я понял это очень близко, но я не могу понять, как заставить скрипт разместить данные Vlookup в Slack. Вот фотография того, как это выглядит, где выделенные ячейки - это столбцы vlookup:

Example Photo

И вот код скрипта Служб Google, над которым я работаю:

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);
}

1 Ответ

0 голосов
/ 17 сентября 2018

Я частично решил это. В итоге я просто использовал первую часть кода приложения Google Script, чтобы заполнить данные из слабины на листе Google, и избавился от части // И ЭТО ВОЗВРАТ //. Затем я использовал IF и ArrayFormula для столбцов Vlookup на странице Google. Затем я использовал automate.io для нового триггера строки, чтобы отправить его обратно в резерв. На всякий случай, если кто-то еще хочет это сделать.

...