Slack > Gsheet > VLookup > Slack
Slack > Gsheet > VLookup > Slack
过去几周我一直在为这个问题苦苦挣扎,所以我真的希望有人能帮助我解决这个问题。另外我对代码很陌生,这基本上激发了我对它的兴趣。
我想做的是为 Google Sheet 和 link 写一个 Google Apps 脚本到入站和出站 Slack webhook,所以我可以在 Slack 中 post 一个像 PO# 这样的命令,它会填充一个电子表格,其中 vlookup
列内置了一个数组公式,然后我想 post 返回Slack 从 Vlookup
中提取了哪些数据。我最初有这个想法from this link。
我已经非常接近了,但我不知道如何将脚本post 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);
}
我半解决了这个问题。我最终只使用 Google 脚本应用程序代码的第一部分将数据从 slack 填充到 google sheet 并摆脱了 //AND THEN THIS IS THE RETURN//部分。然后我对 google sheet 中的 Vlookup 列使用了 IF 和 ArrayFormula。然后我使用 automate.io 作为新行触发器将其发送回松弛状态。以防万一其他人想要这样做。
过去几周我一直在为这个问题苦苦挣扎,所以我真的希望有人能帮助我解决这个问题。另外我对代码很陌生,这基本上激发了我对它的兴趣。
我想做的是为 Google Sheet 和 link 写一个 Google Apps 脚本到入站和出站 Slack webhook,所以我可以在 Slack 中 post 一个像 PO# 这样的命令,它会填充一个电子表格,其中 vlookup
列内置了一个数组公式,然后我想 post 返回Slack 从 Vlookup
中提取了哪些数据。我最初有这个想法from this link。
我已经非常接近了,但我不知道如何将脚本post 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);
}
我半解决了这个问题。我最终只使用 Google 脚本应用程序代码的第一部分将数据从 slack 填充到 google sheet 并摆脱了 //AND THEN THIS IS THE RETURN//部分。然后我对 google sheet 中的 Vlookup 列使用了 IF 和 ArrayFormula。然后我使用 automate.io 作为新行触发器将其发送回松弛状态。以防万一其他人想要这样做。