我正在尝试构建一个简单的应用程序,以便为 Google 电子表格中的每一新行向 Slack 发布一条消息。我可以从工作表中获取信息并将其发布到记录器,我可以发布到 Slack,但我似乎只能让它与循环中的第一行一起工作(而记录器将接收所有行的所有值).我可能只是弄乱了循环的工作方式(对此是新的),但盯着它看了几个小时现在我看不到它了。我的目的是将其设置为在编辑时触发(它是从 Google 表单填充的),因此我添加了一个列来标记何时发送了 Slack 消息,只是为了避免无论出于何种原因出现无休止的消息循环。
我已经尝试记录输出并可以在那里获取所有值。不过,将帖子放到代码的 Slack 部分的同一位置只会产生一个帖子。
//Set up a variable to show when we've sent a message to Slack
var slackSentText = "Yes";
//This is hte Slack hook
var url = "https://hooks.slack.com/services/tokens!";
function getNewInfo() {
var sheetname = "Info"
var myspreadsheet = SpreadsheetApp.openById('secretID!');
var sheet = myspreadsheet.getSheetByName(sheetname);
// set rows until work out how to do more elegantly...
var startRow = 8; // First row of data to process
var numRows = 5; // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, 11);
var data = dataRange.getValues();
// iterate and make variables for Slack
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var idNumber = row[0];
var projectType=row[6];
var supplierName=row[2];
var projectName=row[3];
var projectDescription=row[4];
var projectStatus=row[1];
var projectDate=row[5];
var slackSent = row[10];
// check if column is marked with Slack sent note and if so ignore. If not send Slack
if (slackSent !== slackSentText) {
// Slack bit
var slackMessage = {
"channel": "ID-number-bot",
"username": "ID-bot",
"text": "\n :white_check_mark:" +
"\n *New Project:* " + idNumber +
"\n *Project Name:* " + projectName +
"\n *Supplier:* " + supplierName +
"\n *Project Status:* " + "["+projectStatus+"]" +
"\n *Project Description:* " + "_"+projectDescription+"_" +
"\n *Project Type:* " + projectType +
"\n *Estimated Delivery Date:* " + projectDate +
"\n"+ slackSent +
"\n Job folder string: \n" + "RCM "+jobNumber+" "+projectName +
"\n \n"
};
var options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(slackMessage)
};
return UrlFetchApp.fetch(url,options);
sheet.getRange(startRow + i, 11).setValue(slackSentText);
Logger.log("jobNumber:"+jobNumber)
Logger.log("projectType:"+projectType)
Logger.log("supplierName:"+supplierName)
Logger.log("projectName:"+projectName)
Logger.log("projectDescription:"+projectDescription)
Logger.log("projectStatus:"+projectStatus)
Logger.log("projectDate:"+projectDate)
}
}
// SpreadsheetApp.flush();
}
非常感谢大家。希望我已经提供了足够的信息。
最佳答案
正如@Tanaike 所建议的,您的问题应该通过更改来解决:
return UrlFetchApp.fetch(url,options);
对此:
UrlFetchApp.fetch(url,options)
return
关键字让您脱离循环。代码在第一次迭代中找到 return
,因此它不会继续处理后续行,这就是为什么您只发送第一行的原因。
关于javascript - 我正在尝试使用 Google Scripts 为电子表格的每一新行发布一条 Slack 消息 - 但我只收到一个帖子。我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58550007/