Попытка отправить письмо по электронной почте в Google, но ответ не определен - PullRequest
0 голосов
/ 02 марта 2020

У меня есть около 10 листов с продажами за день для каждого держателя прилавка, и каждый из них отправляется по электронной почте ночью на прилавок. Все они имеют один и тот же сценарий для отправки электронной таблицы по электронной почте, но теперь 3 сообщают об ошибке «Ответ не определен».

Пожалуйста, можете кто-нибудь мне помочь.

См. Ниже мой сценарий.

/* Send Spreadsheet in an email as PDF, automatically */
function emailSpreadsheetAsPDF() {
  // Send the PDF of the spreadsheet to this email address
  const email = "Email for the stallholder";

  // Get the currently active spreadsheet URL (link)
  // Or use SpreadsheetApp.openByUrl("<>");
  const ss = SpreadsheetApp.getActiveSpreadsheet();

var today = new Date();
var dd = today.getDate();

var mm = today.getMonth()+1; 
var yyyy = today.getFullYear();
if(dd<10) 
{
    dd='0'+dd;
} 

if(mm<10) 
{
    mm='0'+mm;
} 
today = dd+'/'+mm+'/'+yyyy;
console.log(today);

  // Subject of email message
  const subject = ("Daily Sales Summary - " + today);

  // Email Body can  be HTML too with your logo image - see ctrlq.org/html-mail
  const body = "<br>Hi Julie,<br>" + "<br>Please find attached your Daily Sales Summary.<br>" + "<br>Kind Regards,<br>" + "<br>"
    console.log('\n')

  // Base URL
  const url = 'https://docs.google.com/spreadsheets/d/SS_ID/export?'.replace('SS_ID', ss.getId());

  const exportOptions =
    'exportFormat=pdf&format=pdf'
    '&size=A4'
    '&portrait=true' + // orientation, false for landscape
    '&fitw=true&source=labnol' + // fit to page width, false for actual size
    '&sheetnames=false&printtitle=false' + // hide optional headers and footers
    '&pagenumbers=false&gridlines=false' + // hide page numbers and gridlines
    '&fzr=false' + // do not repeat row headers (frozen rows) on each page
    '&gid='; // the sheet's Id

  const token = ScriptApp.getOAuthToken();
  const sheets = ss.getSheets();

  // make an empty array to hold your fetched blobs
  const blobs = [];

  for (var i = 0; i < sheets.length; i += 1) {
    // Convert individual worksheets to PDF
    const response = UrlFetchApp.fetch(url + exportOptions + sheets[i].getSheetId(), {
      headers: {
        Authorization: 'Bearer ' + token
      }
    })

    // convert the response to a blob and store in our array
    blobs[i] = response.getBlob().setName('Daily Sales');
  }

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

    });
}

1 Ответ

1 голос
/ 03 марта 2020

Как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

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

  • В вашем сценарии, в следующей части, exportOptions возвращает только exportFormat=pdf&format=pdf , Поскольку оператор + не добавляется после того, как 'exportFormat=pdf&format=pdf'.

    const exportOptions =
      'exportFormat=pdf&format=pdf'
      '&size=A4'
      '&portrait=true' + // orientation, false for landscape
      '&fitw=true&source=labnol' + // fit to page width, false for actual size
      '&sheetnames=false&printtitle=false' + // hide optional headers and footers
      '&pagenumbers=false&gridlines=false' + // hide page numbers and gridlines
      '&fzr=false' + // do not repeat row headers (frozen rows) on each page
      '&gid='; // the sheet's Id
    
  • const response = UrlFetchApp.fetch(###) вставлено в для l oop. А также attachments: [response] используется во вне для l oop. При этом возникает ошибка "Response is not defined".

    • Кстати, в вашем скрипте я думаю, что даже когда const из const response = UrlFetchApp.fetch(###) изменяется на var, ошибки не возникает .

Когда вышеуказанные точки отражаются в вашем сценарии, как насчет следующей модификации?

Шаблон 1:

В этом шаблоне используются для l oop и модифицированные exportOptions. В этом случае каждый лист добавляется как каждый файл вложения. Поэтому, когда в электронной таблице 3 листа, 3 файла PDF отправляются как файлы вложений.

Пожалуйста, измените следующим образом.

С:

  const exportOptions =
    'exportFormat=pdf&format=pdf'
    '&size=A4'
    '&portrait=true' + // orientation, false for landscape
    '&fitw=true&source=labnol' + // fit to page width, false for actual size
    '&sheetnames=false&printtitle=false' + // hide optional headers and footers
    '&pagenumbers=false&gridlines=false' + // hide page numbers and gridlines
    '&fzr=false' + // do not repeat row headers (frozen rows) on each page
    '&gid='; // the sheet's Id

  const token = ScriptApp.getOAuthToken();
  const sheets = ss.getSheets();

  // make an empty array to hold your fetched blobs
  const blobs = [];

  for (var i = 0; i < sheets.length; i += 1) {
    // Convert individual worksheets to PDF
    const response = UrlFetchApp.fetch(url + exportOptions + sheets[i].getSheetId(), {
      headers: {
        Authorization: 'Bearer ' + token
      }
    })

    // convert the response to a blob and store in our array
    blobs[i] = response.getBlob().setName('Daily Sales');
  }

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

    });

Кому:

const exportOptions =
  'exportFormat=pdf&format=pdf' +
  '&size=A4' +
  '&portrait=true' + // orientation, false for landscape
  '&fitw=true&source=labnol' + // fit to page width, false for actual size
  '&sheetnames=false&printtitle=false' + // hide optional headers and footers
  '&pagenumbers=false&gridlines=false' + // hide page numbers and gridlines
  '&fzr=false' + // do not repeat row headers (frozen rows) on each page
  '&gid='; // the sheet's Id
const token = ScriptApp.getOAuthToken();
const sheets = ss.getSheets();
const blobs = [];
for (var i = 0; i < sheets.length; i += 1) {
  const response = UrlFetchApp.fetch(url + exportOptions + sheets[i].getSheetId(), {headers: {Authorization: 'Bearer ' + token}});
  blobs[i] = response.getBlob().setName('Daily Sales' + i);
}
if (MailApp.getRemainingDailyQuota() > 0)
GmailApp.sendEmail(email, subject, body, {htmlBody: body, attachments: blobs});

Шаблон 2:

В этом шаблоне используются модифицированные exportOptions. И для l oop не используется. В этом случае каждый лист добавляется как один файл вложения. Поэтому, когда в электронной таблице 3 листа, 1 файл PDF отправляется как файл вложения.

Пожалуйста, измените следующим образом.

От:

То же самое с шаблон 1.

Кому:

const exportOptions =
  'exportFormat=pdf&format=pdf' +
  '&size=A4' +
  '&portrait=true' + // orientation, false for landscape
  '&fitw=true&source=labnol' + // fit to page width, false for actual size
  '&sheetnames=false&printtitle=false' + // hide optional headers and footers
  '&pagenumbers=false&gridlines=false' + // hide page numbers and gridlines
  '&fzr=false' // do not repeat row headers (frozen rows) on each page
const token = ScriptApp.getOAuthToken();
const response = UrlFetchApp.fetch(url + exportOptions, {headers: {Authorization: 'Bearer ' + token}});
if (MailApp.getRemainingDailyQuota() > 0)
GmailApp.sendEmail(email, subject, body, {htmlBody: body, attachments: [response.getBlob()]});

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

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