Google App Script在使用触发器运行时不调用其他函数



每天更新SQL查询的GAS突然开始超时,因此我决定将函数拆分为2,并尝试通过将数据库拆分为2来链接它们。为了检查第一个函数的结束位置,我添加了这个函数来查找最后一个空行:

function getFirstEmptyRowByColumnArray() {
var spr = SpreadsheetApp.getActiveSpreadsheet();
var column = spr.getRange('A:A');
var values = column.getValues(); // get all data in one call
var ct = 0;
while ( values[ct] && values[ct][0] != "" ) {
ct++;
}
return (ct+1);
};

这是用来让这个函数在连接行开始写:

function Leden2() {
var conn = Jdbc.getConnection(...);
var SQLstatement = conn.createStatement();
var result = SQLstatement.executeQuery("select concat (Firstname,' ', LastName), pla.team1, pla.team2, Birthday, Gender from account a right join player_info pla on pla.accountid = a.id where a.isactive = 1 and accountid>300");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Leden");
var cell = sheet.getRange('A2');

var row = getFirstEmptyRowByColumnArray()-2;
while (result.next()) {
for (var col = 0; col < result.getMetaData().getColumnCount(); col++) {
cell.offset(row, col).setValue(result.getString(col + 1));
}
row++;
}

如果我手动运行函数的两个部分,它可以完美地工作(因此Leden2知道它必须在第一个函数之后开始编写),但是当我使用触发器Leden2从第一行开始运行它时。

有人知道是什么原因引起的吗?

试试这个:

function getFirstEmptyRowByColumnArray() {
var sh = SpreadsheetApp.getActiveSpreadsheet();
var rg = sh.getRange('A1:A' + sh.getLastRow());
var vs = rg.getValues();
return (vs.length);
}

最新更新