Причина, по которой ваш скрипт занимает так много времени, заключается в том, что вы записываете каждое значение на лист при извлечении его из базы данных.Там два setValue
комментируют внутри цикла.Скажем, на 0,2 секунды каждые 16 000 строк - это много времени.Более эффективный подход - поместить результаты в двумерный массив, а затем после цикла вставить массив на лист с помощью одной команды.Ваше выполнение должно снизиться до нескольких секунд.
Сохраните отдельные циклы для заголовка и строк данных, но измените их следующим образом.(Не проверено)
// declare some arrays
masterValue = [];
value = [];
// get the header row
for (var h = 1; h < header.length; h++) {
value.push(header[h]); // header row to an array
}
masterValue.push(value); //push the header row into a 2d array.
// Loop through the data
while (result.next()) {
value = []; // reset the value array
for (var i = 0; i < num_col; i++) {
value.push(result.getString(i + 1)); // get the data from each column
}
row++;
masterValue.push(value);
}
<<insert code closing connection >>
// update the target sheet with the contents of the array
sheet.getRange(1, 1, masterValue.length, value.length);
sheet.setValues(masterValue);