Вы сказали: 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);
}