Как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
Точки модификации:
В вашем сценарии, в следующей части, 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()]});
Если я неправильно понял ваш вопрос, и это было не то направление, которое вы хотите, я прошу прощения.