google-apps-script - 循环遍历谷歌工作表中的列和行以标记 gmail - 谷歌应用脚本
问题描述
我正在尝试使用工作表列标记 gmail 线程。代码本身很好,我已经使用单行进行了测试。例如,A2 (MessageID 1) 和 B2 (Label 1) 我让它成功地根据列标记 gmail 线程。
但是,现在我正在为循环而苦苦挣扎。
这是脚本
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet2 = ss.getSheetByName("Sheet1")
var range=sheet2.getRange('A2:A');
var value =range.getValues();
var range2=sheet2.getRange('B2:B');
var value2 =range2.getValues();
var i = 0; //count
while ( value2[i][0] != "" && value2[i][0] != "#N/A" ) {
let label = GmailApp.getUserLabelByName(value2[i]);
if (!label) {label = GmailApp.createLabel(value2[i]);
console.log("Get threads");
var threads= GmailApp.getThreadById(value[i]);
console.log("Add label");
threads.addLabel(label);
i++;
}
return i;
}
}
这是列的图像
这是测试表的链接
代码执行问题:
- 如果 include
return i;
,它只处理第一行而不循环其他行。 - 如果删除
return i;
执行永远不会停止。
我尝试过应用其他类型的循环,这可能是因为我不太精通循环,但这是迄今为止我能得到的最接近的。
那么有没有解决办法呢?
解决方案
位于语句i++
中if
- 因此,如果它正在处理的标签已经存在,它可能永远不会增加。
我假设你应该只有一个声明if()
:
if (!label) {
label = GmailApp.createLabel(value2[i]);
}
然后你需要删除}
代码中额外的下层。
此外,return 语句是多余的。
如果代码缩进正确,可能更容易看到发生了什么。
推荐阅读
- amazon-web-services - 从 Athena 获取数据并粘合权限
- spring - 如何实现支持 Spring 分页的 feign 请求?
- sccm - 查询 AD 以查找 OU 中用户正在使用的计算机
- ruby-on-rails - 我无法访问 rails 控制台
- java - 比较 JSON 和数组
- json - 无法从 JSON API 获取数据
- mysql - 如何在 MySQL 中搜索作为值的子字符串的行?
- javascript - 在页面上的所有脚本完全加载后运行 js 函数
- c# - NUnit 全局 SetupFixture 未执行
- hadoop - 将没有引号的字符串数据加载到 Hive