Как включить определенный диапазон c только в PDF-файл, экспортированный из электронной таблицы Google Sheets - PullRequest
0 голосов
/ 12 июля 2020

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

На листе есть 2 вкладки и я хотел бы, чтобы оба они были отправлены в одном электронном письме как часть одного и того же вложения (как в настоящее время настроено). Электронное письмо создается путем нажатия кнопки отправки в настраиваемом меню отправки вверху:

https://docs.google.com/spreadsheets/d/1EFJKr9281PND_h8TXNeumaCXb8KWLJQw9Itn0i_AZmI/edit#gid = 1494149448

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('SUBMIT')
      .addItem('SUBMIT', 'menuItem1')
      .addToUi();
}

function menuItem1() {
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
     sendSheetToPdfwithA1MailAdress();
  
}

function sendSheetToPdfwithA1MailAdress(){ // this is the function to call
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName("TEAM1"); // it will send sheet 0 which is the first sheet in the spreadsheet.
  // if you change the number, change it also in the parameters below
  var practiceName = sh.getRange('E2').getValue()
  var startDate = sh.getRange('I4:L5').getValue();
  var emailBody = sh.getRange('I45').getValue();
  var staffName = sh.getRange('c43').getValue()
var shName = Utilities.formatString('%s %s',practiceName, startDate)
var message = "<HTML><BODY>"
        + "<P>Hi,"
        + "<br /><br />"
        + " Please find attached the payroll info for " + practiceName + " for the period " + startDate + "."
        + "<br /><br />" 
        + "" + emailBody + "."
        + "<br /><br />" 
        + " If you have any question please let me know"
        + "<br /><br />"
        + "Thanks, " + staffName + "."
        + "<br /><br />"
        + "</HTML></BODY>";
  sendSpreadsheetToPdf(0, shName, sh.getRange('A46').getValue(),"Payroll Summary", " " + message + " ");
}
function sendSpreadsheetToPdf(sheetNumber, pdfName, email,subject, htmlbody) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName("TEAM1");
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheetId = spreadsheet.getId()  
  var sheetId = sheetNumber ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;  
  var url_base = spreadsheet.getUrl().replace(/edit$/,'');
  var email2 = sh.getRange('A47').getValue();
  var email3 = sh.getRange('A48').getValue();

  var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf

      + (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId)) 
      // following parameters are optional...
      + '&size=A4'      // paper size
      + '&portrait=false'    // orientation, false for landscape
      + '&fitw=true'        // fit to width, false for actual size
      + '&sheetnames=true&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 blob = response.getBlob().setName(pdfName + '.pdf');
  if (email) {
    var mailOptions = {
      attachments:blob, htmlBody:htmlbody, email2:email2 
    }
MailApp.sendEmail(
      email, 
      subject+" (" + pdfName +")", 
      "html content only",  
      mailOptions);
    
MailApp.sendEmail(
      email2, 
      subject+" (" + pdfName +")", 
      "html content only",  
      mailOptions);

MailApp.sendEmail(
      email3, 
      subject+" (" + pdfName +")", 
      "html content only",  
      mailOptions);
  }
}

1 Ответ

2 голосов
/ 12 июля 2020

Заявление об ограничении ответственности: я не верю, что использование параметров запроса для управления экспортом PDF официально поддерживается Google, но этот GitHub Gist от Spencer-Easton содержит информацию, необходимую для выполнения sh ваша цель.

Проблема заключается в параметрах запроса, хранящихся в url_ext.

Вы должны включить gid, которое вы можете получить из URL-адреса листа в редакторе листов (/edit#gid=NUMBERS).

Вам нужно добавить к url_ext:

  • gid=NUMBERS (посмотрите URL, чтобы получить числа)
  • ir=false (неизвестно к чему это относится)
  • ic=false (неизвестно, к чему это относится)
  • r1=0 (начальная строка, нулевой индекс)
  • c1=0 (начальная колонка, нулевой индекс)
  • r2=43 (конец строки, обратите внимание на изменение индекса)
  • c2=14 (конец столбца, обратите внимание на изменение индекса)

Я добавил тех и смог отправить по электронной почте только выбранные части выбранного листа.

...