功能通过菜单或手动工作 运行 - 但不使用 Google 时间事件
Functions work from menu or manually run - but not using Google Time Event
我有两个功能-
- 第一个收到电子邮件 - getEmails();
- 第二个删除我的垃圾箱 - deleteForever();
a) 我创建了一个自定义菜单来分别触发上述功能并且它们都起作用。
b) 测试后我添加了一个 Google Project Trigger using Timed Event
getEmails 函数停止工作正常。
当 运行 时,脚本没有错误 & 结果是:
- 数据插入工作表<- 这样做的原因POST-这从来没有发生过
- 电子邮件移至垃圾箱
getEmails();
<- 成功 - 我亲眼看到了
- 电子邮件删除 w/
deleteForever();
<- 成功-我亲眼看到了
环境变化:我测试了何时在浏览器中打开和关闭电子表格和 gmail
FIX 尝试:我使用了 getActiveSheet() * 注意它已将其注释掉 *
并替换为实际的电子表格 ID,认为这有助于解决我的问题,但结果相同。
有什么想法吗?
函数 1 -(不适用于项目触发器定时事件,但可以手动执行)
function getEmails() {
/*var ss = SpreadsheetApp.getActiveSheet();*/
var ss = SpreadsheetApp.openById("1Y-MY-SPREADSHEET-ID-8q9q98k");
var threads = GmailApp.search("is:starred in:WebOppCRM");
var row = ss.getLastRow();
for (var i=0; i<threads.length; i++) {
/* COMMENT OUT TO FOCUS ON PURPOSE OF QUESTION
var start = new Date();
if (isTimeUp_(start)) {
Logger.log("Time up");
break;
}
*/
var messages = threads[i].getMessages();
var newrow = row + 1;
for (var j=0; j<messages.length; j++) {
var msg = messages[j].getPlainBody();
var dat = messages[j].getDate();
var msgParse ='=SPLIT($A'+ (newrow) + ', "|")';
ss.appendRow([msg, dat, msgParse]);
newrow = newrow +1;
Utilities.sleep(100);// pause in the loop for 200 milliseconds
}
threads[i].moveToTrash();
}
函数 2 - 与项目触发器或手动一起工作
function deleteForever() {
var threads = GmailApp.search("in:trash");
for (var i = 0; i < threads.length; i++) {
Gmail.Users.Messages.remove("tannerfasteners@gmail.com", threads[i].getId());
}
}
您缺少此功能。它在这里工作,也有一个时间驱动的触发器。
function isTimeUp_(start) {
var now = new Date();
return now.getTime() - start.getTime() > 300000; // alert above 3 minutes, to keep it under 5 minutes
}
我真的宁愿接受另一个人的回答,但是上面没有任何内容甚至没有解决我具体列出的问题。
答案是在没有被我打开的时候把重点放在具体的sheet上
我意识到了
- 代码在脚本顶部执行
- 正在执行以下代码和函数
- 脚本没有指示 Sheet 使用什么
现在也很明显 - 从
移动时
var ss = SpreadsheetApp.getActiveSheet();
以下内容并关闭 sheet
var ss = SpreadsheetApp.openById("-My-Sheet-ID-Removed-");
如果不知道要写入什么sheet,就无法写入数据。
修改我的脚本并添加下面标记为 /SOLUTION>/ 的行以设置活动 sheet
var ss = SpreadsheetApp.openById("-My-ID-Here");
/*SOLUTION>*/ SpreadsheetApp.setActiveSheet(ss.getSheetByName('data'))
var threads = GmailApp.search("is:starred in:WebOppCRM");
var row = ss.getLastRow();
这解决了我的具体问题和问题,即为什么它在 sheet 打开时有效(因为 sheet 因我在上面而处于活动状态)但在 [=43= 时部分停止] 已关闭(因为 sheet 显然不再有效)
希望这可以节省一些调试时间。
我有两个功能-
- 第一个收到电子邮件 - getEmails();
- 第二个删除我的垃圾箱 - deleteForever();
a) 我创建了一个自定义菜单来分别触发上述功能并且它们都起作用。 b) 测试后我添加了一个 Google Project Trigger using Timed Event
getEmails 函数停止工作正常。 当 运行 时,脚本没有错误 & 结果是:
- 数据插入工作表<- 这样做的原因POST-这从来没有发生过
- 电子邮件移至垃圾箱
getEmails();
<- 成功 - 我亲眼看到了 - 电子邮件删除 w/
deleteForever();
<- 成功-我亲眼看到了
环境变化:我测试了何时在浏览器中打开和关闭电子表格和 gmail
FIX 尝试:我使用了 getActiveSheet() * 注意它已将其注释掉 * 并替换为实际的电子表格 ID,认为这有助于解决我的问题,但结果相同。
有什么想法吗?
函数 1 -(不适用于项目触发器定时事件,但可以手动执行)
function getEmails() {
/*var ss = SpreadsheetApp.getActiveSheet();*/
var ss = SpreadsheetApp.openById("1Y-MY-SPREADSHEET-ID-8q9q98k");
var threads = GmailApp.search("is:starred in:WebOppCRM");
var row = ss.getLastRow();
for (var i=0; i<threads.length; i++) {
/* COMMENT OUT TO FOCUS ON PURPOSE OF QUESTION
var start = new Date();
if (isTimeUp_(start)) {
Logger.log("Time up");
break;
}
*/
var messages = threads[i].getMessages();
var newrow = row + 1;
for (var j=0; j<messages.length; j++) {
var msg = messages[j].getPlainBody();
var dat = messages[j].getDate();
var msgParse ='=SPLIT($A'+ (newrow) + ', "|")';
ss.appendRow([msg, dat, msgParse]);
newrow = newrow +1;
Utilities.sleep(100);// pause in the loop for 200 milliseconds
}
threads[i].moveToTrash();
}
函数 2 - 与项目触发器或手动一起工作
function deleteForever() {
var threads = GmailApp.search("in:trash");
for (var i = 0; i < threads.length; i++) {
Gmail.Users.Messages.remove("tannerfasteners@gmail.com", threads[i].getId());
}
}
您缺少此功能。它在这里工作,也有一个时间驱动的触发器。
function isTimeUp_(start) {
var now = new Date();
return now.getTime() - start.getTime() > 300000; // alert above 3 minutes, to keep it under 5 minutes
}
我真的宁愿接受另一个人的回答,但是上面没有任何内容甚至没有解决我具体列出的问题。
答案是在没有被我打开的时候把重点放在具体的sheet上
我意识到了
- 代码在脚本顶部执行
- 正在执行以下代码和函数
- 脚本没有指示 Sheet 使用什么
现在也很明显 - 从
移动时var ss = SpreadsheetApp.getActiveSheet();
以下内容并关闭 sheet
var ss = SpreadsheetApp.openById("-My-Sheet-ID-Removed-");
如果不知道要写入什么sheet,就无法写入数据。
修改我的脚本并添加下面标记为 /SOLUTION>/ 的行以设置活动 sheet
var ss = SpreadsheetApp.openById("-My-ID-Here");
/*SOLUTION>*/ SpreadsheetApp.setActiveSheet(ss.getSheetByName('data'))
var threads = GmailApp.search("is:starred in:WebOppCRM");
var row = ss.getLastRow();
这解决了我的具体问题和问题,即为什么它在 sheet 打开时有效(因为 sheet 因我在上面而处于活动状态)但在 [=43= 时部分停止] 已关闭(因为 sheet 显然不再有效)
希望这可以节省一些调试时间。