【问题标题】:Looping through columns and rows in google sheet to label gmail - google app script循环遍历谷歌工作表中的列和行以标记 gmail - 谷歌应用脚​​本
【发布时间】:2021-06-17 14:11:46
【问题描述】:

我正在尝试使用工作表列标记 gmail 线程。代码本身很好,我已经使用单行进行了测试。例如,A2(MessageID 1)和 B2(标签 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;
}  
     
}

这是列的图像

这是testing sheet的链接

代码执行问题:

  1. 如果包含return i;,则只处理第一行,不循环其他行。
  2. 如果删除return i;,执行将永远不会停止。

我尝试过应用其他类型的循环,这可能是因为我不太精通循环,但这是迄今为止我能做到的最接近的。

那么有解决办法吗?

【问题讨论】:

  • 我在我这边试了试。我删除了多余的} 并将Logger.log(value[i]+" "+value2[i]); 包含在while-loop 中。日志中显示的所有行
  • @RonM 是的。我根本没有注意到 T^T 。我已将其删除,并且效果很好。谢谢!

标签: google-apps-script google-sheets gmail label


【解决方案1】:

i++ 位于 if 语句中 - 如果它正在处理的标签已经存在,它可能永远不会增加。

我假设你应该在 if() 里面只有一个语句:

if (!label) {
  label = GmailApp.createLabel(value2[i]);
}

然后你需要删除代码中多余的}

另外,return 语句是多余的。

如果代码缩进正确,可能更容易看到发生了什么。

【讨论】:

  • 我现在感觉好傻,这么粗心的错误。下次我一定会更加注意代码缩进。我已经检查了} 很多次,并认为这已经足够了,因为没有错误.. 根本没有注意到位置 T^T。谢谢。
  • 没问题 - 我们都做到了。您很快就会向其他人指出这一点:-)
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多