我有一个脚本,可以将报告以pdf格式保存在特定的驱动器文件夹中。根据在电子表格的单元格B2中选择的选项,可以用三种不同的方式打印报告。我希望为每个选项保存一个pdf。
大多数脚本都能很好地工作。唯一的问题是,当脚本更改单元格B2的值时,工作表在另存为pdf之前不会使用新选项刷新。因此,我得到了三个不同名称的pdf,但是它们具有相同的内容。记录器和三个不同的pdf告诉我,for循环遍历这三个选项。但是,电子表格在保存为pdf之前不会更新为新选项。
无奈之下,我试图在setValue命令之后放入一个等待命令(我知道,cr脚的编码),无济于事。
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.
}
}
是否有任何想法让脚本在工作表更改时等待,或强制工作表刷新?
答案 0 :(得分:0)
在对电子表格进行任何更改后,尝试使用SpreadsheetApp.flush();
,然后另存为pdf。如果这样不起作用,请使用SpreadsheetApp.flush();
并让脚本等待,可以在刷新后使用Utilities.sleep();
并重试,这对我有用。