У меня есть скрипт, который сохраняет отчет в формате PDF в определенной папке диска.Отчет можно распечатать тремя различными способами, в зависимости от параметра, выбранного в ячейке B2 электронной таблицы.Я хотел бы сохранить один PDF для каждой опции.
Большинство сценариев работает очень хорошо.Единственная проблема заключается в том, что когда скрипт изменяет значение ячейки B2, лист не обновляется с новой опцией, прежде чем он будет сохранен в формате PDF.Итак, я получаю три файла с разными именами, но они имеют одинаковое содержание.Регистратор и три различных файла PDF говорят мне, что цикл for циклически перебирает все три параметра.Но электронная таблица не обновляется до новой опции перед сохранением в pdf.
В отчаянии я пытался вставить команду ожидания (я знаю, дрянное кодирование) после команды setValue, но безрезультатно.
function sendWeeklyToFaculty(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var folder = DriveApp.getFolderById("0B-m6KcESC3NCSG02WVhtdUVBLTQ");
var reportSheet = spreadsheet.getSheetByName("Faculty Report");
//These are the different report options
var optionArray = ["Option","Student","Percentage"];
//This cycles through each report option
for each (var info in optionArray) {
Logger.log(info);
reportSheet.getRange("B2").setValue(info);
var reportOption = info;
var pdfName ="GA Summary - By "+ reportOption;
//This bit removes any files with the same name
var files = folder.getFilesByName(pdfName + ".pdf");
while (files.hasNext()) {
files.next().setTrashed(true);
}
//This bit creates the new file
var sheetId = spreadsheet.getSheetByName("Faculty Report").getSheetId();
var url_base = spreadsheet.getUrl().replace(/edit$/,'');
var url_ext = 'export?exportFormat=pdf&format=pdf' //export as pdf
// Print either the entire Spreadsheet or the specified sheet if optSheetId is provided
+ (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId))
// following parameters are optional...
+ '&size=letter' // paper size
+ '&portrait=true' // orientation, false for landscape
+ '&fitw=true' // fit to width, false for actual size
+ '&sheetnames=false&printtitle=false&pagenumbers=false' //hide optional headers and footers
+ '&gridlines=false' // hide gridlines
+ '&fzr=false'; // do not repeat row headers (frozen rows) on each page
var options = {
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(),
}
}
var response = UrlFetchApp.fetch(url_base + url_ext, options);
var blob = response.getBlob().setName(pdfName + '.pdf');
folder.createFile(blob);
//need a bit to send a reminder e-mail to the faculty, once I get the reports to create themselves correctly.
}
}
Есть какие-нибудь мысли о том, как заставить скрипт ждать изменения листа или заставить лист обновиться?