Звонки на любые внешние службы, включая spreadsheetApp
, делают ваш код медленным
Чтобы сделать ваш скрипт более эффективным, я рекомендую не добавлять новую строку в каждую for
l oop итерация, но вместо этого pu sh данные в двумерный массив и вставка их в свой лист только один раз, после выхода из l oop.
Перепишите свой скрипт следующим образом:
function SDesigns() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(["Name", "URL", "Download", "Date", "Size", "Description", "Image"]);
//change the folder ID below to reflect your folder's ID (look in the URL when you're in your folder)
var folder = DriveApp.getFolderById("FOLDER_ID");
var contents = folder.getFiles();
var cnt = 0;
var file;
var array = [];
while (contents.hasNext()) {
var file = contents.next();
cnt++;
data = [
file.getName(),
file.getUrl(),
"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
/* file.getDateCreated(),
file.getSize(),
file.getDescription(),
"=image(\"https://docs.google.com/uc?export=download&id=" + file.getId() +"\")", */
];
array.push(data);
};
sheet.getRange((sheet.getLastRow()+1), 1, array.length, array[0].length).setValues(array);
};
Это сделает ваш код примерно в 3 раза быстрее и избавит вас от необходимости обходить максимальное время выполнения.
Для меня для папки, содержащей 110 файлов, время выполнения скрипта составило 3,13 с. Экстраполируя на 10000 изображений, время выполнения не должно превышать 285 с.
Объединить ваш скрипт со вторым найденным вами скриптом было бы довольно сложно. Причина в том, что DriveApp не получает файлы в установленном порядке. Таким образом, если вы остановите перечисление файлов и захотите возобновить при следующем выполнении скрипта, нет гарантии, что вы не получите дубликаты.