Сценарий создания PDF со старым снимком данных из электронной таблицы Google? - PullRequest
0 голосов
/ 02 марта 2020

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

Что мне здесь не хватает? Есть ли необходимость сохранить или flu sh текущий файл? Любая помощь приветствуется здесь.

Ткс, Иван Даудт

function onFormSubmit(e) {
      var responses = e.namedValues;
      var s = SpreadsheetApp.getActiveSheet();  
      var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];
      var row = s.getActiveCell().getRow(); //identify last row
      var sourceRange = s.getRange(row,1,1,38); //Get the soure range.

      //open target file and updates its data
      var destFile = SpreadsheetApp.openById("1c8NepY_2ZDxrRVzrhbax4VRPGarqb59eir8wNQ7w4qc");
      SpreadsheetApp.setActiveSpreadsheet(destFile);
      var destSheet = destFile.getSheetByName("dados do aluno");
      var destRange = destSheet.getRange(2,1,1,38); //Gets the destination sheet range.
      destRange.setValues(sourceRange.getValues()); //Gets source sheet value and uses it to set the imported sheet value.
      //send by email
      var sheetNumber = (tab.getIndex()-1);
      var sheetId = sheetNumber ? destFile.getSheets()[sheetNumber].getSheetId() : null;  
      var url_base = destFile.getUrl().replace(/edit$/,'');

      var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf
          + (sheetId ? ('&gid=' + sheetId) : ('&id=' + destFile.getId())) 
          // following parameters are optional...
          + '&size=A4'      // paper size
          + '&portrait=true'    // orientation, false for landscape
          + '&fitw=true'        // fit to width, false for actual size
          + '&sheetnames=false&printtitle=false&pagenumbers=true'  //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 thePdf = response.getBlob().setName('Avaliação '+ onome + '.pdf');  
      MailApp.sendEmail(
        mailtoaddr[0],
        subject,
        message,
        {attachments: [thePdf]});
   }

1 Ответ

1 голос
/ 03 марта 2020
  • Вы хотите знать причину this code sends a pdf with a snapshot of data prior to the update.

Если мое понимание верно, как насчет этого ответа?

Очки модификации:

  • В вашем скрипте данные помещаются в destRange с использованием destRange.setValues(sourceRange.getValues());. Хотя я не уверен насчет tab из var sheetNumber = (tab.getIndex()-1);, если вы хотите экспортировать destSheet из var destSheet = destFile.getSheetByName("dados do aluno"); в формате PDF, необходимо поставить SpreadsheetApp.flush() после destRange.setValues(sourceRange.getValues());. Таким образом, положенные значения отражаются в данных PDF.
  • Ситуация сверху, о Is there a need to save or flush the current file?, это да.

Модифицированный скрипт:

Когда Ваш сценарий изменен, пожалуйста, измените его следующим образом.

С:
destRange.setValues(sourceRange.getValues());
К:
destRange.setValues(sourceRange.getValues());
SpreadsheetApp.flush();  // Added

Ссылка:

Если это не то направление, которое вы хотите, я прошу прощения.

...