Batch insertion in google apps script. I am using push to write data from a table to a sheet. Is there a way to do batch insert 3000 records and loop through via a trigger to execute after a couple of minutes until all the records are inserted in google apps script.
function myBatchInsert() {
var connection = Jdbc.getConnection("jdbc:mysql://host:port", "user", "passwrd");
var query = connection.createStatement();
var result = query.executeQuery('SELECT * FROM Table WHERE');
var googlespreadsheet;
var sheet;
var googlespreadsheetSheetName = "Table";
googlespreadsheet = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId());
var datasheet = googlespreadsheet.getSheetByName("Table");
datasheet.setName("Table");
SpreadsheetApp.setActiveSpreadsheet(googlespreadsheet);
sheet = SpreadsheetApp.setActiveSheet(googlespreadsheet.getSheetByName(googlespreadsheetSheetName));
var columncount = result.getMetaData().getColumnCount();
var columnName;
for (var column = 1; column <= columncount; column++) {
sheet.getRange(1, column).setValue(result.getMetaData().getColumnName(column));
}
var document = SpreadsheetApp.getActiveSpreadsheet();
var cell = document.getRange('A2');
var row = 0;
var data = [];
for (var i = 0; i < 1; i++) {
while (result.next()) {
var rowData = [];
for (var column = 0; column < result.getMetaData().getColumnCount(); column++) {
rowData.push(result.getString(column + 1));
}
data.push(rowData);
}
sheet.getRange(sheet.getLastRow() + 1, 1, data.length, data[0].length).setValues(data);
}
result.close();
query.close();
connection.close();
}
You can try reading about Batching (but it is more on adding to database than writing to sheets).
Use batch operations
There is no batch function regarding adding data to sheets but you can use a function efficiently to optimize your code.
// DO NOT USE THIS CODE. It is an example of SLOW, INEFFICIENT code. // FOR DEMONSTRATION ONLY var cell = sheet.getRange('a1'); for (var y = 0; y < 100; y++) { xcoord = xmin; for (var x = 0; x < 100; x++) { var c = getColor_(xcoord, ycoord); cell.offset(y, x).setBackgroundColor(c); xcoord += xincrement; } ycoord -= yincrement; SpreadsheetApp.flush(); }
The inefficient code takes about 70 seconds to run. The efficient code runs in just 1 second!