Как автоматически добавлять строки для отображения в верхней части листа Google - PullRequest
0 голосов
/ 26 января 2020

Я довольно новичок в этом, поэтому, пожалуйста, потерпите меня.

У меня есть Google Sheet, который использует скрипт для перетаскивания основного текста определенных писем в Google Sheets. Затем я использую функции «влево» и «вправо» в «Листах», чтобы разбить текст на полезные фрагменты. После этого эта полезная информация отображается на первой странице листа, чтобы я мог видеть, кто отправил электронное письмо, их номер телефона, что они хотят и т. Д. c. Все это прекрасно работает, но когда я получаю новое электронное письмо, оно добавляет информацию внизу листа, и я очень хотел бы, чтобы новая информация была добавлена ​​вверху (но все еще под моими заголовками - строка 2).

Я могу привести пример или даже дать доступ к Листу, если это поможет.

Заранее спасибо.

Редактировать: Это то, что я имею до сих пор :

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('NAME');

  var label = GmailApp.getUserLabelByName("LABEL");
  var threads = label.getThreads();

  for (var i=0; i<threads.length; i++)
  {
    var messages = threads[i].getMessages();

    for (var j=0; j<messages.length; j++)
    {
      if (messages[j].isUnread())
          {
            var msg = messages[j].getBody();      
            sheet.appendRow([msg]);
            messages[j].markRead();
          }
    }
      threads[i].removeLabel(label);
  }
}

Если честно, я не понимаю всего, что он делает, но я собрал все это вместе с другими ответами здесь, и, кажется, он делает то, что я хочу, поэтому я иду с этим.

1 Ответ

3 голосов
/ 26 января 2020

Вы сказали: I have a Google Sheet that uses a script to pull the body text of certain emails into Google Sheets.

Таким образом, этот сценарий должен вставить новую строку в любое удобное для вас место и скопировать эту информацию в эту новую строку.

Вы сказали: it gets added with appendRow

Итак, возьмите параметр appendRow(parameter) и вставьте следующую функцию в качестве rowArray. Также укажите число, где вам нужно, go, имя листа и объект электронной таблицы.

function insertRowAndCopyDataIntoIt(rownumber,rowArray,sheetname,spreadsheet) {
  var ss=spreadsheet;
  var sh=ss.getSheetByName(sheetname);
  sh.insertRowBefore(rownumber);
  sh.getRange(rownumber,1,1,rowArray.length).setValues([rowArray]);  
}

В качестве альтернативы вы можете предоставить текущую функцию, и я исправлю ее для вас.

Я тестировал эту версию. Он не делает это построчно. Вместо этого он берет все, что уже есть, и помещает его в массив, а затем добавляет новые элементы в начало массива с помощью метода unshift () и выполняет setValues ​​() в конце, выполняя то же самое, но с меньшими затратами. / o записывает и поэтому работает намного быстрее.

function myFunction() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sheet=ss.getSheetByName('OB BAT Emails');
  var label=GmailApp.getUserLabelByName("OB");
  var lr=sheet.getLastRow();
  if(lr>0) {
    var msgA=sheet.getRange(1,1,sheet.getLastRow(),1).getValues();
  }else{
    var msgA=[];
  }
  var threads=label.getThreads();
  for (var i=0;i<threads.length;i++) {
    var messages=threads[i].getMessages();
    for (var j=0;j<messages.length;j++) {
      if (messages[j].isUnread()) {
        var msg=messages[j].getBody();  
        msgA.unshift([msg]);
        messages[j].markRead();
      }
    }
    threads[i].removeLabel(label);
  }
  sheet.getRange(1,1,msgA.length,msgA[0].length).setValues(msgA);
}

Эта функция сначала проверяет, есть ли какие-либо данные на листе. Если есть, то все сообщения помещаются в msgA. Поскольку скрипт находит больше сообщений, которые соответствуют вашим критериям, они добавляются в начало msgA. В конце функция заменяет все данные на листе данными в msgA, перемещая старые данные вниз и оставляя самые последние сообщения сверху.

Требуется больше столбцов ... Вот восемь:

function myFunction() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sheet=ss.getSheetByName('OB BAT Emails');
  var label=GmailApp.getUserLabelByName("Q0/TEST");
  var lr=sheet.getLastRow();
  if(lr>0) {
    var msgA=sheet.getRange(1,1,sheet.getLastRow(),8).getValues();
  }else{
    var msgA=[];
  }
  var threads=label.getThreads();
  for (var i=0;i<threads.length;i++) {
    var messages=threads[i].getMessages();
    for (var j=0;j<messages.length;j++) {
      if (messages[j].isUnread()) {
        var msg=['','','','','','','',''];
        msg[0]=messages[j].getPlainBody().slice(0,49999);;
        msgA.unshift(msg);
        messages[j].markRead();
      }
    }
    threads[i].removeLabel(label);
  }
  sheet.getRange(1,1,msgA.length,msgA[0].length).setValues(msgA);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...