Скрипт не будет ждать обновления страницы листов перед сохранением в формате pdf - PullRequest
1 голос
/ 09 июля 2019

У меня есть скрипт, который сохраняет отчет в формате 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.
  }
}

Есть какие-нибудь мысли о том, как заставить скрипт ждать изменения листа или заставить лист обновиться?

1 Ответ

0 голосов
/ 09 июля 2019

Попробуйте использовать SpreadsheetApp.flush(); после любых изменений, внесенных в электронную таблицу, затем сохраните в формате PDF. Если это не сработает, используйте SpreadsheetApp.flush();, и чтобы заставить скрипт ждать, вы можете использовать Utilities.sleep(); после сброса и повторить попытку, что сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...