По электронной почте неполный PDF, а не PDF с письменными данными - PullRequest
0 голосов
/ 17 декабря 2018

Редактировать: я подтвердил, что заказ работает правильно - но он по-прежнему отправляет по электронной почте пустой шаблон, а не с записанными данными.

Короче говоря, это то, что я пытаюсь достичь:

  1. Пользователь запускает createDoc с массивом данных
  2. Пользователь копирует предопределенныйэлектронная таблица / шаблон
  3. Выполняет операции записи в скопированную версию
  4. Преобразует ее в PDF
  5. Отправляет PDF пользователю по электронной почте

У меня есть всеОперации выполняются правильно и в правильном порядке (подтверждается выводом console.log), однако это отправка по электронной почте пустого шаблона PDF, а не PDF с записанными данными.Что здесь происходит?

var FILE_NAME = 'Initial Checklist Export';

function email(pdf){
  var emailObj = {
      to: Session.getActiveUser().getEmail(),
      subject: FILE_NAME,
      htmlBody: pdf.getUrl(),
      noReply: true
    };

  MailApp.sendEmail(emailObj);
}


function createPDF(tmpDoc) {

  var blob = tmpDoc.getAs(MimeType.PDF);
  var pdfFile = DriveApp.createFile(blob);
  pdfFile.setName(FILE_NAME);

  email(pdfFile);
}

function writeData(tmpDoc, sheet, checklist) {
  var data_pos = ['B8', 'B10', 'B9', 'B11', 'E8', 'E9', 'E10', 'E11', 'B7', 'E7', 'B15', 'B16',
                  'B17', 'B18', 'B20', 'B21', 'B23', 'B24', 'B26', 'B27', 'B29','B31','B32',
                  'B33', 'B34','B35','B36','B38','B39','B40','B41','B43', 'E14','E15','E16',
                  'E17','E18','E19','E20','E21','E22','E23','E25','E26','E27', 'E28','E29',
                  'E30','E32','E33','E34','E35','E36','E37','E38','E39','E40','E41', 'E42',
                  'E43','E45','E46','E47','E48','E49','E50','E51','E52', 'E53','E54', 'E55',
                  'E56','E57','E58','A62'];

  for (var i in checklist){
    var range = sheet.getRange(data_pos[i]);
    range.setValue(checklist[i]);
    if (i == checklist.length-1){
      createPDF(tmpDoc);
    }
  }
}



function createDoc(checklist) { 
  var spreadsheet = SpreadsheetApp.openById('redacted');
  var tmpDoc = spreadsheet.copy('Temp Copy of spreadsheet');
  var sheet = tmpDoc.getSheetByName('Template');   
  writeData(tmpDoc, sheet, checklist); 
}

1 Ответ

0 голосов
/ 18 декабря 2018

Я бы посоветовал попробовать следующий код, чтобы убедиться, что он исправит оставшуюся проблему.Этот фрагмент кода также должен несколько сократить время обработки за счет исключения повторных вызовов getRange (), которые становятся дорогостоящими (с точки зрения времени) при вызовах службы Spreadsheet.Дайте мне знать, если это все еще не работает, и мы сможем увидеть дальнейшие изменения.

var FILE_NAME = 'Initial Checklist Export';

function email(pdf){
  var emailObj = {
      to: Session.getActiveUser().getEmail(),
      subject: FILE_NAME,
      htmlBody: pdf.getUrl(),
      noReply: true
    };

  MailApp.sendEmail(emailObj);
}

function createPDF(tmpDoc) {

  var blob = tmpDoc.getAs(MimeType.PDF);
  var pdfFile = DriveApp.createFile(blob);
  pdfFile.setName(FILE_NAME);

  email(pdfFile);
}

function createDoc(checklist) { 
  var spreadsheet = SpreadsheetApp.openById('redacted');
  var tmpDoc = spreadsheet.copy('Temp Copy of spreadsheet');
  var sheet = tmpDoc.getSheetByName('Template');

  var data_pos = ['B8','B10','B9','B11','E8','E9','E10','E11','B7','E7','B15', 
                  'B16','B17','B18','B20','B21','B23','B24','B26','B27',                
                  'B29','B31','B32','B33','B34','B35','B36','B38','B39','B40',
                  'B41','B43','E14','E15','E16','E17','E18','E19','E20','E21',
                  'E22','E23','E25','E26','E27','E28','E29','E30','E32','E33',
                  'E34','E35','E36','E37','E38','E39','E40','E41','E42','E43',
                  'E45','E46','E47','E48','E49','E50','E51','E52','E53','E54', 
                  'E55','E56','E57','E58','A62'];

  var ranges = sheet.getRangeList(data_pos).getRanges();

  for (var i in checklist){
    ranges[i].setValue(checklist[i]);
  }
  SpreadsheetApp.flush();
  createPDF(tmpDoc);
}
...