Проверка содержимого ячеек Google Sheets с помощью скрипта Apps для определения необходимости экспорта PDF-файла - PullRequest
0 голосов
/ 12 мая 2018

Сценарий пытается отправить электронное письмо, к которому прикреплен zip-файл листов, преобразованный в файлы PDF. В zip-файл должны быть включены только листы с содержанием.

function zipit() {
  SpreadsheetApp.flush();

  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/[Google Key]/edit#");
// Base URL
  var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", ss.getId());  
  var print1  = ss.getSheetByName("Print1");  
  var print2A = ss.getSheetByName("Print2A");
  var print2B = ss.getSheetByName("Print2B");
  var print2C = ss.getSheetByName("Print2C");
  var print3A = ss.getSheetByName("Print3A");

//get email address to send to 
  var organiserEmail = calcSheet.getRange("E31").getValue();   

//get date range for next month
  var tablesSheet = ss.getSheetByName("Next Month");
  var period = print1.getRange("V2:W2").getValue(); // period for the league taken from League 1
  var subject = "Singles League print outputs for : " + period;
  var body = "Attached are the PDF files to allow you to print the tables";

  var url_ext = 'exportFormat=pdf&format=pdf'        // export as pdf / csv / xls / xlsx
    + '&size=A4'                           // paper size legal / letter / A4
    + '&portrait=false'                    // orientation, false for landscape
    + '&fitw=true'                         // fit to page width, false for actual size
    + '&sheetnames=false&printtitle=false' // hide optional headers and footers
    //+ '&printRange'
    + '&pagenumbers=false'                 // hide page numbers
    + '&gridlines=true'                    // hide gridlines
    + '&fzr=false'                         // do not repeat row headers (frozen rows) on each page
    + '&gid=';                             // the sheet's Id

// Use token to access the sheet
  var options = {
    headers: {
      'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(),
      'muteHttpExceptions': true,
    }
  };


// make empty array to hold fetched blobs
  var blobs = [];
  var i=0; // Set start number of 'blobs[]'

// **league 1**
  var SheetId = '56'; // id of League 1 print sheet - 'print1'
  var filename = '1' + '.pdf';
  // create PDF
    // Convert individual worksheets to PDF
    try { var response = UrlFetchApp.fetch(url + url_ext + SheetId, options); }
    catch(err) { Browser.msgBox("Error"); }

    // Convert the response to a blob and store in array
    blobs[i] = response.getBlob().setName(filename);
    i=i+1; // Set number of 'blob'

// **League 2A**
  // Check if sheet has content
  if (print2A.getRange("A11").getValue() != null) {
    SheetId = '58'; // id of League 1 print sheet - 'print2A'
  // create PDF
    // Convert individual worksheets to PDF
    try { var response = UrlFetchApp.fetch(url + url_ext + SheetId, options); }
    catch(err) { Browser.msgBox("Error"); }

    // Convert the response to a blob and store in array
    blobs[i] = response.getBlob().setName('2A' + '.pdf');
    i=i+1; // Set number of 'blob'
  }  

// **League 2B**
  // Check if sheet has content
  if (print2B.getRange("A11").getValue() != null) {
    SheetId = '59'; // id of League 2B print sheet - 'print2B'
  // create PDF
    // Convert individual worksheets to PDF
    try { var response = UrlFetchApp.fetch(url + url_ext + SheetId, options); }
    catch(err) { Browser.msgBox("Error"); }

    // Convert the response to a blob and store in array
    blobs[i] = response.getBlob().setName('2B' + '.pdf');
    i=i+1; // Set number of 'blob'
  }     

// **League 2C**
  //Check if sheet has content
  if (print2C.getRange("A11").getValue() != null) {
    SheetId = '62'; // id of League 2C print sheet - 'print2C'
  // create PDF
    // Convert individual worksheets to PDF
    try { var response = UrlFetchApp.fetch(url + url_ext + SheetId, options); }
    catch(err) { Browser.msgBox("Error"); }

    // Convert the response to a blob and store in array
    blobs[i] = response.getBlob().setName('2C' + '.pdf');
    var i=i+1; // Set number of 'blob'
  }

// **League 3A**
  // Check if sheet has content
  if (print3A.getRange("A11").getValue() != null) {
    SheetId = '60'; // id of League 3A print sheet - 'print3A'
  // create PDF
    // Convert individual worksheets to PDF
    try { var response = UrlFetchApp.fetch(url + url_ext + SheetId, options); }
    catch(err) { Browser.msgBox("Error"); }

    // Convert the response to a blob and store in array
    blobs[i] = response.getBlob().setName('3A' + '.pdf');
    i=i+1; // Set number of 'blob'
  }

/************************************************/
// New Participants
  SheetId = '38'; // id of New Participants print sheet - 'New Participants Alpha'

  // create PDF
  // Convert individual worksheets to PDF
  try { var response = UrlFetchApp.fetch(url + url_ext + SheetId, options); }
  catch(err) { Browser.msgBox("Error"); }

  // Convert the response to a blob and store in array
  blobs[i] = response.getBlob().setName('Participants' + '.pdf');

/************************************************/
// Send email
  // create a new blob that is a zip file containing our blob array
  var zipBlob = Utilities.zip(blobs).setName('Singles League :' + period + '.zip');

  // If allowed to send emails, send the email with the PDF attachment
  if (MailApp.getRemainingDailyQuota() > 0) 
     GmailApp.sendEmail(organiserEmail, subject, body, {
       htmlBody: body,
       attachments:[zipBlob]     
     }); 
}

Идея состояла в том, чтобы напечатать первый лист (Лига 1), а затем перейти к Лиге 2А, ​​где проверяется ячейка А11 (1,11), чтобы увидеть, есть ли контент ... если в этой ячейке есть контент, то преобразовать страницу в PDF и создать «блоб» ... если в A11 нет содержимого, затем перейти к League 2B, проверить содержимое ячейки A11, если нет, затем перейти к League 2C, если есть содержимое, затем преобразовать страницу в PDF и создайте «блоб» ... и так далее до последней страницы под названием Участники. Последняя задача - создать zip-файл и отправить электронное письмо с приложенным zip-файлом.

Проблема в том, что проверка ячейки «А11» не работает. Все листы (1.pdf, 2A.pdf, 2B.pdf, 2C.pdf, 3A.pdf и Players.pdf) находятся в zip-файле, независимо от того, имеют ли они содержимое. Электронная часть рутины работает как надо. Лист участников не печатается, вместо этого есть дубликат 3А ... Кто-нибудь может посоветовать, что происходит и предложить исправления? Спасибо в ожидании.

Запись под рабочим кодом для достижения цели .... только последняя часть включена ниже: -

// Get token to access the sheet
   var token = ScriptApp.getOAuthToken();
   var options = {
        headers:{
        'Authorization': 'Bearer ' + token,
        'muteHttpExceptions': true,
        }

        };

  var SheetId = '56'; // id of League 1 print sheet - 'print1'
  var filename = '1' + '.pdf';
// create PDF
   // Convert individual worksheets to PDF
      try {
      var response = UrlFetchApp.fetch(url + url_ext + SheetId, options);
      }
      catch(err)
      {
      Browser.msgBox("Error");
      }

    // Convert the response to a blob and store in array
       blobs.push(response.getBlob().setName(filename));

// League 2A
  // Check if sheet has content
     if ((print2A.getRange("A11").getValue())!= ""){ 
     SheetId = '58'; // id of League 1 print sheet - 'print2A'
     filename = '2A' + '.pdf';
 // create PDF
    // Convert individual worksheets to PDF
       try {
       var response = UrlFetchApp.fetch(url + url_ext + SheetId, options);
       }
       catch(err)
       {
       Browser.msgBox("Error");
      }

     // Convert the response to a blob and store in array
        blobs.push(response.getBlob().setName(filename));

     }  

// League 2B
  // Check if sheet has content
     if ((print2B.getRange("A11").getValue())!= ""){
     SheetId = '59'; // id of League 2B print sheet - 'print2B'
     filename = '2B' + '.pdf';

// create PDF
   // Convert individual worksheets to PDF
      try {
      var response = UrlFetchApp.fetch(url + url_ext + SheetId, options);
          }
      catch(err)
      {
      Browser.msgBox("Error");
      }

    // Convert the response to a blob and store in array
       blobs.push(response.getBlob().setName(filename));

      }     

// League 2C
  //Check if sheet has content
    if ((print2C.getRange("A11").getValue())!= ""){
    SheetId = '62'; // id of League 2C print sheet - 'print2C'
    filename = '2C' + '.pdf';

 // create PDF
    // Convert individual worksheets to PDF
       try {
       var response = UrlFetchApp.fetch(url + url_ext + SheetId, options);
           }
       catch(err)
       {
       Browser.msgBox("Error");
       }

    // Convert the response to a blob and store in array
       blobs.push(response.getBlob().setName(filename));

       }

// League 3A
   // Check if sheet has content
      if ((print3A.getRange("A11").getValue())!= ""){
      SheetId = '60'; // id of League 3A print sheet - 'print3A'
      filename = '3A' + '.pdf';

// create PDF
    // Convert individual worksheets to PDF
       try {
       var response = UrlFetchApp.fetch(url + url_ext + SheetId, options);
           }
       catch(err)
          {
       Browser.msgBox("Error");
       }

    // Convert the response to a blob and store in array
       blobs.push(response.getBlob().setName(filename));

  }

// League 3B
   // Check if sheet has content
      if ((print3A.getRange("A11").getValue())!= ""){
      SheetId = '61'; // id of League 3B print sheet - 'print3B'
      filename = '3B' + '.pdf';

 // create PDF
    // Convert individual worksheets to PDF
       try {
        var response = UrlFetchApp.fetch(url + url_ext + SheetId, options);
           }
        catch(err)
         {
       Browser.msgBox("Error");
        }

    // Convert the response to a blob and store in array
       blobs.push(response.getBlob().setName(filename));

    }

  /************************************************/
 // New Participants
    SheetId = '38'; // id of New Participants print sheet - 'New Participants Alpha'
    filename = 'Participants' + '.pdf';
  // create PDF
    // Convert individual worksheets to PDF
       try {
       var response = UrlFetchApp.fetch(url + url_ext + SheetId, options);
           }
       catch(err)
       {
       Browser.msgBox("Error");
       }

    // Convert the response to a blob and store in array
       blobs.push(response.getBlob().setName(filename));

 /************************************************/
 // Send email
   // create a new blob that is a zip file containing our blob array
      var zipBlob = Utilities.zip(blobs).setName('Singles League :' + period + '.zip');

  // If allowed to send emails, send the email with the PDF attachment
    if (MailApp.getRemainingDailyQuota() > 0) {
        GmailApp.sendEmail(organiserEmail, subject, body, {
        htmlBody: body,
        attachments:[zipBlob]     
        });  
    };

}
...