'Update last row of Google sheet with Gmail attachment

The below code is working perfectly well, but rather than replacing the entire sheet, I would like to keep pre-existing rows and add the data into new rows.

Below is as close as I have gotten.

Thank you for your help

function myFunction() {
  var thread = GmailApp.getUserLabelByName("mkto").getThreads(0,1);
  var messages = thread[0].getMessages();
  var len = messages.length;
  var message = messages[len-1]; //get last message
  var attachments = message.getAttachments(); // Get attachment of first message
  var blob = attachments[0]; // Is supposes that attachments[0] is the blob of xlsx file.
  blob.setContentTypeFromExtension();

  if (blob.getContentType() == MimeType.MICROSOFT_EXCEL) {

    // Process for XLSX
    var convertedSpreadsheetId = Drive.Files.insert({mimeType: MimeType.GOOGLE_SHEETS}, blob).id;
    var sheet = SpreadsheetApp.openById(convertedSpreadsheetId).getSheets()[0]; // There is the data in 1st tab.
    var data = sheet.getDataRange().getValues();
    Drive.Files.remove(convertedSpreadsheetId); // Remove the converted file.
    var sheet_new = SpreadsheetApp.openById("1Bmcl6p42rBHeIswaSWV861bCrlhZlAJtHPqwJYsnClc").getSheetByName("data");
    sheet_new.clearContents();
    var range = sheet_new.getRange(1,1, data.length,data[0].length);
    range.setValues(data);

  } else if (blob.getContentType() == MimeType.CSV) {

    // Process for CSV
    var csv =  blob.getDataAsString();
    var data = Utilities.parseCsv(csv);
    var a = data.length ;
    var b = data[0].length;
    var sheet = SpreadsheetApp.openById("1Bmcl6p42rBHeIswaSWV861bCrlhZlAJtHPqwJYsnClc").getSheetByName("data");
    sheet.getRange("A:J").clear();
    var range_final = sheet.getRange(1,1, data.length,data[0].length);
    range_final.setValues(data);

  }


Solution 1:[1]

comment out the sheet.clear function to keep the value and append the values from last row +1

function myFunction() {
  var thread = GmailApp.getUserLabelByName("mkto").getThreads(0,1);
  var messages = thread[0].getMessages();
  var len = messages.length;
  var message = messages[len-1]; //get last message
  var attachments = message.getAttachments(); // Get attachment of first message
  var blob = attachments[0]; // Is supposes that attachments[0] is the blob of xlsx file.
  blob.setContentTypeFromExtension();

  if (blob.getContentType() == MimeType.MICROSOFT_EXCEL) {

    // Process for XLSX
    var convertedSpreadsheetId = Drive.Files.insert({mimeType: MimeType.GOOGLE_SHEETS}, blob).id;
    var sheet = SpreadsheetApp.openById(convertedSpreadsheetId).getSheets()[0]; // There is the data in 1st tab.
    var data = sheet.getDataRange().getValues();
    Drive.Files.remove(convertedSpreadsheetId); // Remove the converted file.
    var sheet_new = SpreadsheetApp.openById("1Bmcl6p42rBHeIswaSWV861bCrlhZlAJtHPqwJYsnClc").getSheetByName("data");
    //sheet_new.clearContents();
    var range = sheet_new.getRange(sheet_new.getLastRow()+1, 1, data.length,data[0].length);
    range.setValues(data);


  } else if (blob.getContentType() == MimeType.CSV) {

    // Process for CSV
    var csv =  blob.getDataAsString();
    var data = Utilities.parseCsv(csv);
    var a = data.length ;
    var b = data[0].length;
    var sheet = SpreadsheetApp.openById("1Bmcl6p42rBHeIswaSWV861bCrlhZlAJtHPqwJYsnClc").getSheetByName("data");
    //sheet.getRange("A:J").clear();
    var range = sheet.getRange(sheet.getLastRow()+1, 1, data.length,data[0].length);
    range.setValues(data);

  }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 liquidkat