我是编码和应用程序脚本的新手。我正在尝试在更新单元格时向 Slack 发送消息,这样我可以在复选框值更改时将消息发送到 Slack。
我不确定我是否可以将 var availability 更改为可以显示公式值的其他内容。
function sendSlackMessage(e) {
if(e.range.getColumn() == 2) {
var source = e.source;
var row = e.range.getRow();
var column = e.range.getColumn();
var stall = source.getActiveSheet().getRange(row, 1, 1, 1).getValue();
var date = source.getActiveSheet().getRange(row, 3, 1, 1).getValue();
var availability = e.value;
var url = "";
var payload = {
text: "Stall #" +" "+ stall + " " + "is" + " " + availability
}
var headers = {
'Content-type': 'application/json'
}
var options = {
headers: headers,
method: 'POST',
payload: JSON.stringify(payload)
}
UrlFetchApp.fetch(url, options);
}else {
return;
}
}
我已经尝试过
setValue
和getDisplayValue
但是那些没有用。
您的代码仅在您使用复选框手动编辑工作表时运行的原因是因为您的脚本处于条件
if (e.range.getColumn() == 2)
内,这意味着它仅在您在B列上编辑时运行。因此,如果您对其他列进行编辑,它只会返回,因为您的 else 语句会捕获它。
}else {
return;
}
如何删除此条件并改为添加以下内容,因此如果您编辑其他列,它将运行并且availability无论您编辑B列,C列还是D列,您将获得的仍然是B列的值:
if (e.range.getColumn() == 2) {
var availability = e.value;
} if (e.range.getColumn() == 3) {
var availability = source.getActiveSheet().getRange(row, column - 1, 1, 1).getValue();
} else if (e.range.getColumn() == 4) {
var availability = source.getActiveSheet().getRange(row, column - 2, 1, 1).getValue();
}
尝试:
function sendSlackMessage(e) {
var source = e.source;
var row = e.range.getRow();
var column = e.range.getColumn();
var stall = source.getActiveSheet().getRange(row, 1, 1, 1).getValue();
var date = source.getActiveSheet().getRange(row, 3, 1, 1).getValue();
//Get Availability
if (e.range.getColumn() == 2) {
var availability = e.value;
} if (e.range.getColumn() == 3) {
var availability = source.getActiveSheet().getRange(row, column - 1, 1, 1).getValue();
} else if (e.range.getColumn() == 4) {
var availability = source.getActiveSheet().getRange(row, column - 2, 1, 1).getValue();
}
var url = "https://hooks.slack.com";
var payload = {
text: "Stall #" + " " + stall + " " + "is" + " " + availability
}
var headers = {
'Content-type': 'application/json'
}
var options = {
headers: headers,
method: 'POST',
payload: JSON.stringify(payload)
}
UrlFetchApp.fetch(url, options);
}