У меня есть следующий сценарий G.A.S для отправки таблицы Google по электронной почте в виде вложения в формате PDF.
var spreadsheet = SpreadsheetApp.getActive();
var subject = spreadsheet.getRange("U1:U1").getValues();
var emailTo = spreadsheet.getRange("V1:V1").getValues();
var message = spreadsheet.getRange("W1:W1").getValues();
var pdf = DriveApp.getFileById(spreadsheet.getId()).getAs('application/pdf').getBytes();
var attach = {fileName:subject,content:pdf, mimeType:'application/pdf'};
MailApp.sendEmail(emailTo, subject, message, {attachments:[attach]});
Приведенный выше код работает хорошо, за исключением того, что файл, прикрепленный к сообщению электронной почты, имеет странное имя, например «[Ljava.lang.Object_@4e63998c» без расширения «.pdf»! Я ищу способ установить имя для файла pdf перед прикреплением к электронному письму. Имя файла должно совпадать с переменной «субъект».
Заранее спасибо. Омид
@tehhowch TypeError: не удается найти функцию getBlob в объекте Blob.
@omid используйте его без вызова getBytes()
Уважаемый @Tanaike, Это было большим подспорьем и сработало. Для получения более подробной информации проверьте комментарии к вашему ответу. Однако я до сих пор не понимаю, что этот маленький [0][0] делает в коде. Не могли бы вы сообщить мне о странице или ссылке, чтобы узнать об использовании этого [0][0]? Большое спасибо, приятель. Заботиться :)
@Tanaike Кстати, есть ли способ отправить этот PDF-файл конкретному человеку через Telegram вместо электронной почты !?
@tehhowch Когда я бросаю getBytes(), я получаю сообщение об ошибке «Вложение не распознается как строковое или двоичное».
Я подумал, что @tehhowch может предложить изменить var pdf = ... и var attach = ... в вашем скрипте на var attach = DriveApp.getFileById(spreadsheet.getId()).getBlob().setName(subject[0][0]);. Теххуч. Если я неправильно понял ваш комментарий, мне очень жаль.

Значения, полученные getValues(), представляют собой двумерный массив. Я думаю, что имя файла становится такой строкой, потому что в качестве имени файла используется массив. Получите элемент из массива и повторите попытку. Не могли бы вы изменить следующее?
var attach = {fileName:subject,content:pdf, mimeType:'application/pdf'};
var attach = {fileName:subject[0][0],content:pdf, mimeType:'application/pdf'};
Вы также можете использовать следующую модификацию. В этом случае getValue() может получить значение в виде строки из ячейки «U1».
var subject = spreadsheet.getRange("U1:U1").getValues();
var subject = spreadsheet.getRange("U1:U1").getValue();
Если это не то, что вам нужно, скажите, пожалуйста. Я хотел бы подумать о других решениях.
Ух ты! Большой! Это решило проблему, когда я вставил [0][0]. Однако изменение getValues() на getValue() привело к тому, что имя файла состояло только из одного символа, который был первым символом значения указанной переменной. Кстати, большое спасибо. Браво :)
Я также ценю ваш ясный и подробный ответ, который был полностью полезен для такого новичка, как я, и я мог легко применить его. Спасибо большое, приятель :)
Кстати, есть ли способ отправить этот PDF-файл конкретному человеку через Telegram вместо электронной почты !?
И еще один вопрос. Прилагаемый файл pdf включает около 13 страниц, но только первая пара страниц содержит информацию, а остальные страницы пусты. Есть ли способ ограничить PDF-файл только той частью листа, которая содержит данные, и обрезать пустые страницы ?!
@Omid Спасибо за ответ. [0][0] из subject[0][0] означает адрес элемента в двумерном массиве, извлеченный getValues(). В вашем случае значение из «U1: U1» только одно. Итак, адрес - [0][0]. Вы можете увидеть подробную информацию на stackoverflow.com/questions/966225/…
Спасибо за ответ и полезное объяснение. Но вы забыли включить ссылку на подробную информацию. :)
@ Омид, прости. Я добавил URL. Пожалуйста, подтвердите.
@Omid Мне жаль, что я плохо знаю английский. Что касается ваших дополнительных вопросов, не могли бы вы опубликовать их, включая подробную информацию, в качестве нового вопроса? Потому что я не мог понять вашу ситуацию из ваших комментариев. Если вы разместили это как новый вопрос, я думаю, что это поможет многим пользователям, включая меня, подумать о вашем решении.
Спасибо, я получил ссылку :)
На самом деле ваш английский очень хорош. ОК, я отправлю это как новый вопрос. Ваше здоровье.
@Omid Спасибо за быстрый ответ. Также я хотел бы подтвердить ваш пост.
Уважаемый @Tanaike, я разместил свой вопрос в виде нового сообщения здесь stackoverflow.com/q/50941647/9863856
@Omid Спасибо, что сообщили мне об этом.
Я немного опоздал, но другой способ решить эту проблему:
var spreadsheet = SpreadsheetApp.getActive();
var subject = spreadsheet.getRange("U1:U1").getValues();
var emailTo = spreadsheet.getRange("V1:V1").getValues();
var message = spreadsheet.getRange("W1:W1").getValues();
var pdf = DriveApp.getFileById(spreadsheet.getId())
.getAs('application/pdf')
.getBlob()
.setName(subject);
MailApp.sendEmail(emailTo, subject, message, {attachments:[pdf]});
Класс Blob имеет метод setNamehttps://developers.google.com/apps-script/reference/base/blob#setName(String), который можно связать с объектом Blob (который является результатом getBlob()).
После этого вам просто нужно добавить объект Blob в массив attachments функции MailApp.sendEmail.
Попробовать как
getBlobвместоgetBytes?