Создать PDF из невидимых листов Google Script - PullRequest
1 голос
/ 28 октября 2019

Я создал простой скрипт электронной почты для листа Google. Мне нужно, чтобы прикрепить PDF-файл активного файла, но только 3 листа (3 невидимых листа). Я пробовал несколько вещей, но, похоже, ничего не работает, я, честно говоря, не являюсь экспертом в сценарии Google, поэтому я могу упустить что-то очевидное. Вот мой код:

function sendEmails() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Email');
  var startRow = 2; // First row of data to process
  var numRows = 1; // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, 3);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i in data) {
    var row = data[i];
    var emailAddress = row[0]; // First column
    var message = row[1]; // Second column
    var subject = row[2];
    var file= SpreadsheetApp.getActive();
    MailApp.sendEmail(emailAddress, subject, message,{cc:"example@gmail.com",attachments:[file.getAs(MimeType.PDF)]});
  }
}

Что он делает, так это прикрепляет всю электронную таблицу в формате PDF, что мне не помогает, потому что в PDF есть много скрытых листов, которые мне не нужны,Пожалуйста, помогите мне!! Спасибо!

1 Ответ

1 голос
/ 28 октября 2019

Функция будет отправлять электронные письма получателю в листе электронных писем, который также содержит тему и сообщение. Он также создает PDF текущей таблицы с листами в массиве incl. После отправки электронного письма оно возвращает листы в исходное состояние видимости.

function emailAsPDF() {
  var ss=SpreadsheetApp.getActive();
  var incl=['Sheet2','Emails'];
  var pdfFolderId="Folder Id";
  var folder=DriveApp.getFolderById(pdfFolderId);
  var sObj={shA:[]};
  var shts=ss.getSheets();
  shts.forEach(function(sh,i){
    sObj.shA.push(sh.getName());
    if(sh.isSheetHidden()) {
      sObj[sh.getName()]='hide';
    }else{
      sObj[sh.getName()]='show';
    }
    if(incl.indexOf(sh.getName())!=-1) {
      sh.showSheet();
    }else{
      sh.hideSheet();
    }
  });
  var file=folder.createFile(ss.getBlob()).setName(ss.getName()).getAs(MimeType.PDF);
  var sh=ss.getSheetByName('Emails');
  var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
  var hA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
  var hObj={};
  hA.forEach(function(e,i){if(e){hObj[e]=i;}})
  var vA=rg.getValues();
  vA.forEach(function(r,i){
    var recipient=r[hObj.recipient];
    var subject=r[hObj.subject];
    var message=r[hObj.message];
    GmailApp.sendEmail(recipient, subject, message, {attachments:[file]})
  })
  sObj.shA.forEach(function(name,i){
    if(sObj[name]=='hide') {
      ss.getSheetByName(name).hideSheet();
    }else{
      ss.getSheetByName(name).showSheet();
    }
  });
}

Это изображение моего листа электронной почты:

enter image description here

Я знаю ... Это довольно тривиально, но вы можетеулучшай как хочешь.

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