gpt4 book ai didi

google-apps-script - 当从另一个应用程序写入单元格时触发电子邮件 (IFTTT)

转载 作者:行者123 更新时间:2023-12-02 17:36:05 26 4
gpt4 key购买 nike

这就是我一直在做的事情。我是一名篮球教练,有一个电子表格,可以从 IFTTT.com 中提取我的所有球员的推文(它基本上采用 Twitter 列表的 RSS 提要,当更新时,它会更新电子表格)。

我一直致力于编码,基本上是“如果玩家在推特上发布了不恰当的词语,请立即给我发电子邮件。”

我已经弄清楚了代码,如果我只是输入不适当的单词,它会将单元格变成红色并向我发送电子邮件。但是,在 IFTTT 自动用推文更新电子表格后,我还没有弄清楚如何获取代码以通过电子邮件发送给我。

这是迄今为止我的代码。现在我只有一个“触发”词,即“玩家”,只是为了尝试让电子表格正常工作。代码如下:

function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();//Get the spreadsheet
var sheet = ss.getActiveSheet()//Get the active sheet
var cell = ss.getActiveCell().activate();//Get the active cell.
var badCell = cell.getA1Notation();//Get the cells A1 notation.
var badCellContent = cell.getValue();//Get the value of that cell.


if (badCellContent.match("players")){
cell.setBackgroundColor("red")
MailApp.sendEmail("antadrag@gmail.com", "Notice of possible inappropriate tweet", "This tweet says: " + badCellContent + ".");
}
}

这里是我正在使用的电子表格的链接:https://docs.google.com/spreadsheets/d/1g5XaIycy69a3T2YcWhcbBy0hYrxSfoEEz8c4-zP63O8/edit#gid=0非常感谢对此的任何帮助或指导!谢谢!

最佳答案

我最初为 your previous question 写了这个答案,因此它包含了对您的一些评论的回答,但由于您继续要求社区逐步编写此内容,因此这是下一步。

<小时/>

The issue I'm running into is that if three tweets come into the spreadsheet at the same time, with my code, it's only going to update the most recent cell, not all three. Does that make sense?

是的,确实有道理。

onEdit() 触发器函数调用电子表格服务函数以从工作表获取当前信息时,它会进入“竞争条件”。如果在触发 onEdit() 的更改以及计划的时间之后工作表中发生任何更改,则这些更改将在运行时可见。这就是当您假设您正在处理的更改位于最后一行时所看到的情况 - 当您处理它时,可能会出现一个新的最后一行。

不过,好消息 - 传递给 onEdit 的事件对象的属性包含更改的详细信息。 (参数e。)参见 Event objects .

通过使用e.rangee.value,您会发现触发触发器的已编辑单元格的位置和内容。如果在触发器服务之前有其他推文到达,您的函数将不会被欺骗来处理最后一行。

在新工作表中,可以针对多个单元格更改(例如剪切和粘贴)触发 onEdit()。不管这种情况发生的可能性有多小,它都值得报道。

Well, after getting the spreadsheet all setup & actually using the trigger from IFTTT, it doesn't work. :( I'm assuming it's not dubbing it as the active cell whenever it automatically pulls it into the spreadsheet. Any idea on a workaround on that?

问:什么时候编辑不是编辑? A:当它是由脚本制作时。在这种情况下,这是一个改变。您可以添加可安装的 on Change 函数来捕获这些事件。不幸的是,更改事件没有编辑事件那么详细,因此您不得不阅读电子表格来找出更改的内容。我的习惯是让更改处理程序通过构造一个假事件(就像我们测试时所做的那样)来模拟编辑,并将其传递给 onEdit 函数。

所以尝试一下吧。这个脚本:

  • 处理“坏词”列表。 (也可以轻松监控对您的产品或事业的提及。)
  • 有一个 onEdit() 函数,该函数使用事件对象来评估触发函数调用的行。
  • 给“坏”推文加上颜色
  • 有一个测试onEdit()触发器的函数,基于How can I test a trigger function in GAS?
  • 包括 playCatchUp(e),这是一个可安装的触发器函数(基于更改和/或基于时间),它将评估之前未评估过的任何行。 Script property “Last Processed Row” 用于跟踪该行值。 (如果您计划删除行,则需要调整属性。)
  • 已注释掉 sendMail 函数。

享受吧!

// Array of bad words. Could be replaced with values from a range in spreadsheet.
var badWords = [
"array",
"of",
"unacceptable",
"words",
"separated",
"by",
"commas"
];

function onEdit(e) {
if (!e) throw new Error( "Event object required. Test using test_onEdit()" );

Logger.log( e.range.getA1Notation() );

// e.value is only available if a single cell was edited
if (e.hasOwnProperty("value")) {
var tweets = [[e.value]];
}
else {
tweets = e.range.getValues();
}
var colors = e.range.getBackgrounds();

for (var i=0; i<tweets.length; i++) {
var tweet = tweets[i][0];
for (var j=0; j< badWords.length; j++) {
var badWord = badWords[j];
if (tweet.match(badWord)) {
Logger.log("Notice of possible inappropriate tweet: " + tweet);
colors[i][0] = "red";
//MailApp.sendEmail(myEmail, "Notice of possible inappropriate tweet", tweet);
break;
}
}
}
e.range.setBackgrounds(colors);
PropertiesService.getDocumentProperties()
.setProperty("Last Processed Row",
(e.range.getRowIndex()+tweets.length-1).toString());
}

// Test function, adapted from https://stackoverflow.com/a/16089067/1677912
function test_onEdit() {
var fakeEvent = {};
fakeEvent.authMode = ScriptApp.AuthMode.LIMITED;
fakeEvent.user = "amin@example.com";
fakeEvent.source = SpreadsheetApp.getActiveSpreadsheet();
fakeEvent.range = fakeEvent.source.getActiveSheet().getDataRange();
// e.value is only available if a single cell was edited
if (fakeEvent.range.getNumRows() === 1 && fakeEvent.range.getNumColumns() === 1) {
fakeEvent.value = fakeEvent.range.getValue();
}

onEdit(fakeEvent);
}

// Installable trigger to handle change or timed events
// Something may or may not have changed, but we won't know exactly what
function playCatchUp(e) {
// Check why we've been called
if (!e)
Logger.log("playCatchUp called without Event");
else {
// If onChange and the change is an edit - no work to do here
if (e.hasOwnProperty("changeType") && e.changeType === "EDIT") return;

// If timed trigger, nothing special to do.
if (e.hasOwnProperty("year")) {
var date = new Date(e.year, e.month, e["day-of-month"], e.hour, e.minute, e.second);
Logger.log("Timed trigger: " + date.toString() );
}
}

// Find out where to start processing tweets
// The first time this runs, the property will be null, yielding NaN
var lastProcRow = parseInt(PropertiesService.getDocumentProperties()
.getProperty("Last Processed Row"));
if (isNaN(lastProcRow)) lastProcRow = 0;

// Build a fake event to pass to onEdit()
var fakeEvent = {};
fakeEvent.source = SpreadsheetApp.getActiveSpreadsheet();
fakeEvent.range = fakeEvent.source.getActiveSheet().getDataRange();
var numRows = fakeEvent.range.getLastRow() - lastProcRow;
if (numRows > 0) {
fakeEvent.range = fakeEvent.range.offset(lastProcRow, 0, numRows);
onEdit(fakeEvent);
}
else {
Logger.log("All caught up.");
}
}

screenshot

关于google-apps-script - 当从另一个应用程序写入单元格时触发电子邮件 (IFTTT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26553713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com