在谷歌应用脚本中批量插入。我正在使用push将表中的数据写入工作表。有没有办法批量插入3000条记录,并在几分钟后通过触发器循环执行,直到所有记录都插入谷歌应用程序脚本中。
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();
}
&#13;
答案 0 :(得分:-1)
您可以尝试阅读Batching(但更多的是添加到数据库而不是写入工作表)。
脚本通常需要从电子表格中读取数据,执行计算,然后将数据结果写入电子表格。 Google Apps脚本已经有一些内置的优化功能,例如使用先行缓存来检索脚本可能获取的内容,并编写缓存以保存可能设置的内容。
通过最大限度地减少读写次数,您可以编写脚本以最大限度地利用内置缓存。交替读写命令很慢。要加速脚本,请使用一个命令将所有数据读入数组,对数组中的数据执行任何操作,然后使用一个命令写出数据。
没有关于向工作表添加数据的批处理功能,但您可以有效地使用函数来优化代码。
//不要使用此代码。这是一个SLOW,INEFFICIENT代码的例子。 //仅限演示 var cell = sheet.getRange('a1'); for(var y = 0; y&lt; 100; y ++){ xcoord = xmin; for(var x = 0; x&lt; 100; x ++){ var c = getColor_(xcoord,ycoord); cell.offset(y,x).setBackgroundColor(c); xcoord + = xincrement; } ycoord - = yincrement; SpreadsheetApp.flush(); }
脚本效率低下:它循环遍历100行和100列,连续写入10,000个单元格。 Google Apps脚本回写缓存会有所帮助,因为它会强制在每行末尾使用flush进行回写。由于缓存,只有100个电子表格调用。
但是通过批量调用可以使代码更有效率。这是一个重写,其中单元格区域被读入一个名为colors的数组,颜色分配操作是对数组中的数据执行的,并且数组中的值被写出到电子表格中:
// OKAY TO USE THIS EXAMPLE or code based on it.
var cell = sheet.getRange('a1');
var colors = new Array(100);
for (var y = 0; y < 100; y++) {
xcoord = xmin;
colors[y] = new Array(100);
for (var x = 0; x < 100; x++) {
colors[y][x] = getColor_(xcoord, ycoord);
xcoord += xincrement;
}
ycoord -= yincrement;
}
sheet.getRange(1, 1, 100, 100).setBackgroundColors(colors);
效率低下的代码大约需要70秒才能运行。高效的代码只需1秒钟即可运行!