脚本在保存为pdf之前不会等待工作表页面刷新

时间:2019-07-09 01:30:54

标签: google-apps-script google-sheets

我有一个脚本,可以将报告以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.
  }
}

是否有任何想法让脚本在工作表更改时等待,或强制工作表刷新?

1 个答案:

答案 0 :(得分:0)

在对电子表格进行任何更改后,尝试使用SpreadsheetApp.flush();,然后另存为pdf。如果这样不起作用,请使用SpreadsheetApp.flush();并让脚本等待,可以在刷新后使用Utilities.sleep();并重试,这对我有用。