Я создал форму заказа, используя лист Google, со сценарием, чтобы отправить PDF-документ заказа поставщику. Я протестировал его, и он отлично работал, поэтому я сохранил его в галерее шаблонов.
Теперь, когда я создаю новый Google Sheet из шаблона и запускаю скрипт, я получаю ошибку - TypeError: Невозможно вызвать метод "getSheetId" с неопределенным значением.
Теперь, если я продублирую скрипт нановая электронная таблица, которую я только что создал, и вызов дублированного кода, все работает. Странно то, что когда я сейчас пытаюсь вызвать исходный код, это тоже работает. Даже страннее, когда я сейчас удаляю только что созданный дублированный скрипт, оригинальный код перестает работать снова.
Я делал это несколько раз и получал один и тот же результат.
У кого-нибудь есть идеи? Я что-то здесь делаю не так?
function emailOrder(){ // this is the function to call
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var shName = sh.getName()
var email = sh.getRange('I8').getValue();
var dates = sh.getRange('V8').getValue();
var reference = sh.getRange('V5').getValue();
var vendor = sh.getRange('B5').getValue();
var contact = sh.getRange('B8').getValue();
sendSpreadsheetToPdf(shName, email , vendor + ' - '+ dates + ' - ' + reference , "Hi " + contact + ", <br /> <br /> See attached order for reference: " + reference + ", <br /> <br /> Kind regards, <br />NAME<br /> PH NUMBER <br /> <br />");
};
function sendSpreadsheetToPdf(pdfName, email, subject, htmlbody) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = spreadsheet.getId();
var url_base = spreadsheet.getUrl().replace(/edit$/,'');
var sheetId = spreadsheet.getActiveSheet().getSheetId();
var url_ext = 'export?exportFormat=pdf&format=pdf' //export as pdf
+ (('&gid=' + sheetId ))
// following parameters are optional...
+ '&size=A4' // paper size
+ '&portrait=true' // orientation, false for landscape
+ '&fitw=true' // fit to width, false for actual size
+ '&sheetnames=false&printtitle=false&pagenumbers=false' //hide optional headers and footers
+ '&gridlines=false' // hide gridlines
+ '&fzr=false' // do not repeat row headers (frozen rows) on each page
+ '&top_margin=0.4&bottom_margin=0.4&left_margin=0.4&right_margin=0.4'; // Margins: set all to 0.4
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}
MailApp.sendEmail(
email,
subject,
"html content only",
mailOptions);
}
}