Ich schreibe gerade ein Google-Skript, das leider zu langsam läuft. (Mehr als die 6 Minuten Grenze). Das Skript öffnet ein Dokument, ersetzt zwei Zeichenketten (die in einem Google-Blatt gesetzt werden), speichert es als PDF. Nichts Außergewöhnliches.Google-Skript läuft zu langsam
Ich habe etwa 200 dieser Dokumente, um durch dieses Skript zu laufen, aber innerhalb der 6-Minuten-Grenze schafft es es nur durch sechs zu gehen. Ist Google Script nur so langsam, oder habe ich versehentlich das ineffizienteste Google-Skript überhaupt erstellt?
function createAllPDF() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = SpreadsheetApp.getActiveSheet().getActiveRange()
var numRows = SpreadsheetApp.getActiveSpreadsheet().getLastRow() - 1;
for(var i = 9; i <= numRows; i++) {
var thisRange = sheet.getRange("A" + n + ":C" + n);
var fond = thisRange.getCell(1, 1).getValue();
var adresse = thisRange.getCell(1, 3).getValue();
thisRange.setBackground('#cfe2f3');
genDoc(fond, adresse);
}
}
//// CREATE PDF ////////////////// FUNCTION FOR GENERATING THE PDF /////////////////////////////////
function genDoc(fond, adresse) {
// Finds the template and duplicate it into a new file.
var template = ("xxxxxxxxxxxx");
var docId = DriveApp.getFileById(template).makeCopy().getId();
// Opens the newly created Document for editing
var doc = DocumentApp.openById(docId);
var body = doc.getActiveSection();
// Renames the newly generated document
var newName = doc.setName(fond);
// Replaces each with the parsed variables.
body.replaceText("%FOND%", fond);
body.replaceText("%ADRESSE%", adresse);
doc.saveAndClose();
//Adds the PDF ID to the invoice_input sheet
var conv = DriveApp.getFileById(docId);
var pdf = conv.getAs("application/pdf");
var fileId = DriveApp.createFile(pdf).getId();
// Gets the PDF file by ID
var thisPDF = DriveApp.getFileById(fileId);
// The ID of the folder I'd like to put the PDF into.
var folderId = "xxxxxxxxxxx";
// Gets the folder by ID
var targetFolder = DriveApp.getFolderById(folderId);
// Adds the PDF to the Folder
targetFolder.addFile(thisPDF);
// Removes the PDF from the root.
var root = DriveApp.getRootFolder().removeFile(thisPDF);
// Deletes the duplicated document
DriveApp.getFileById(docId).setTrashed(true)
return fileId;
}
Alle Hinweise zur Optimierung werden sehr geschätzt. Ich bin sehr neu in Google Script und Programmierung im Allgemeinen, also keine großen Worte, hehe. Entschuldigen Sie sich, wenn ich diese Platine falsch verwende. Bitte lass es mich wissen und ich werde korrigieren.
Sie könnten besser bei [Code Review] (http://codereview.stackexchange.com/help/on-topic) – pnuts