Скрипт перестает работать, когда я дублирую Google лист - PullRequest
0 голосов
/ 03 октября 2019

Я создал форму заказа, используя лист 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);
  }
}

1 Ответ

0 голосов
/ 03 октября 2019

Существует два типа документов скриптов приложений - Автономные скрипты и Связанные скрипты.

  • Автономные скрипты не привязаны кконкретный документ и открывается и вызывается отдельно от документа. Таким образом, если вы хотите вызвать электронную таблицу или лист в автономном скрипте, вам нужно сделать это, открыв электронную таблицу по идентификатору или URL-адресу и лист по имени

  • Связанные сценарии связаны с конкретным документом и могут называться связанной таблицей и ее листами с помощью SpreadsheetApp.getActiveSpreadsheet() и spreadsheet.getActiveSheet(). Связанные сценарии технически вызываются отдельно от https://www.google.com/script/. Однако это может привести к ошибкам, если связанная таблица не открыта или открыта несколько раз. Вместо этого связанные скрипты должны быть открыты из пользовательского интерфейса связанного документа через Tools->Script Editor. Практика Goog - открывать только одну версию электронной таблицы, и это недавно, перед вызовом сценария. В противном случае определение активной электронной таблицы и листа может привести к ошибкам.

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