RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1180557
Accepted
Артур Петров
Артур Петров
Asked:2020-09-21 16:52:18 +0000 UTC2020-09-21 16:52:18 +0000 UTC 2020-09-21 16:52:18 +0000 UTC

数据未写入 Google 电子表格

  • 772

大家好。我的脚本将来自标记文件夹的邮件中的“未读”传入消息解析为 Google 电子表格,然后将其标记为“已读”。但有时会出现故障:脚本被执行,将字母标记为“已读”,但不写入表。也就是说,事实上,记录器中有一条记录,其中包含这些字母的所有内容,但它们并没有写入表中。理论上,您需要检查数据是否已写入表中,然后才将字母标记为“已读”。或者代码中存在周期性的错误(HZ)。各位大侠帮忙,我在学习。

    function GmailmarkReadEnd() {
  
  //this is just the stuff that recognizes what spreadsheet you're in
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var sheet = ss.getSheetByName('Лист2'); //gets the right sheet(указать название листа для записи)
  
  /* searches your GMail for emails matching things "label:unread" + " label:support"
  (support-это название  папки в которую собираются письма) */
  var query = "label:unread" + " label:support"; 
  
  var threads = GmailApp.search(query);
  
  var supportStats = [];
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    
    for (var m = 0; m < messages.length; m++) {
      var from = messages[m].getFrom(); //from field
      var to = messages[m].getTo(); //to field
      var time = messages[m].getDate(); //date field
      var subject = messages[m].getSubject(); //subject field
      var body = messages[m].getPlainBody(); //body field(заменить на getBody для html) 
      var mId = messages[m].getId(); //id field to create the link later
      
      if (query === "label:unread" + " label:support") {
        supportStats.push([from,to,time,subject,body,'https://mail.google.com/mail/u/0/#inbox/'+mId]);
        Logger.log(supportStats) // Лог про который говорил.
      }
      
    }
  }
  if(!threads.length) return; //  если нет непрочитанных - ничего не делать.
  sheet.getRange(SpreadsheetApp.getActiveSheet().getLastRow()+1,2,supportStats.
                 length,supportStats[0].length).setValues(supportStats); //writes to the spreadsheet(записывает в электронную таблицу)
  
  GmailApp.markThreadsRead(threads); // помечает, как прочитанное
  
  // ***Сортировка записанных данных по дате***
  sheet.getRange('D:D').activate();
  sheet.sort(4, false);
}
google-apps-script
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Артур Петров
    2020-09-23T16:13:21Z2020-09-23T16:13:21Z

    大家好。感谢那些帮助过的人。这是最终版本,带有评论(什么,是的,如何),适合像我这样的菜鸟😉。用英语讲。论坛帖子,您可以查看详细信息

    代码本身:

        function GmailParsing() {
      var ss = SpreadsheetApp.getActive();
      var sheet = ss.getSheetByName('Лист2'); //получаем нужный лист
      const query = "label:unread" + " label:support"; //"support"-это название  папки в которую собираются письма
      var threads = GmailApp.search(query);
      var supportStats = [];
      for (var i = 0; i < threads.length; i++) {
        var messages = threads[i].getMessages();
        for (var m = 0; m < messages.length; m++) {
          //Здесь выбираем нужные нам поля из писем
          var from = messages[m].getFrom(); //from field
          var to = messages[m].getTo(); //to field
          var time = messages[m].getDate(); //date field
          var subject = messages[m].getSubject(); //subject field
          var body = messages[m].getPlainBody(); //body field((заменить на getBody для html) 
          var mId = messages[m].getId(); //поле id для создания ссылки
          supportStats.push([from,to,time,subject,body,'https://mail.google.com/mail/u/0/#inbox/'+mId]);
          Logger.log(supportStats) // The log 
        }
      }
      if(!threads.length) return; //если нет непрочитанных, ничего не делать
      sheet.getRange(sheet.getLastRow()+1,2,supportStats.length,supportStats[0].length).setValues(supportStats); //запись в электронную таблицу
    /*
    !!!Обратите внимание!!! 
    В моем примере "getLastRow()+1,2"–получаем строку +1 после последней,  2 столбик): запись идет во 2 столбик после последней заполненной строки.
    */
      GmailApp.markThreadsRead(threads); //помечаем как "прочитанное"
      sheet.sort(4, false); // сортировка по столбцу("4"-столбец, "false/true"-порядок сортировки)
    }
    
    • 0

相关问题

  • 计算两个单元格之间的时间差

  • 是否可以以编程方式更改编辑 Google 电子表格表格或单元格的访问权限?

  • 如何确定数组是否相等

  • 为什么会出现错误:异常:您无权调用SpreadsheetApp.openById?

  • 清除特定颜色的表格单元格的内容

  • 如何在 GET 请求中传递二维数组?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5