'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 |
