Скрипт Google Apps не зацикливается - PullRequest
0 голосов
/ 30 августа 2018

Я учитель (а это значит, что я на самом деле не знаю, что я делаю), который пытается сделать рутинную документацию быстрее для наших сотрудников. Я создал лист Google, который будет вставлять информацию из строки ячеек в документ Google. Я хотел бы выяснить, как при запуске сценария он будет запускать его для каждой строки и собирать все в формате PDF, чтобы я печатал данные сразу от нескольких студентов. Вот ссылка на мой документ Google 100 * * о том, что я запускаю этот скрипт.

Есть идеи о том, как я мог бы заставить эту работу? Сценарий, который у меня сейчас есть, работает для первой строки, но он не будет переходить к дополнительным строкам.

 var data = sheet.getRange(4,1,sheet.getLastRow(),
 sheet.getLastColumn()).getValues();
//var data = sheet.getRange(4,1,1,sheet.getLastColumn()).getValues();


var i;
  for (i = 0; i < data.length ; i++) 
    var row = data[i++];{

  // setting up the temporary document
    var docid = DriveApp.getFileById(templateid).makeCopy().getId();
    var doc = DocumentApp.openById(docid);
    var body = doc.getBody();

 // I have removed the parts that gather data and the replace text.


    ss.toast("Creating your ALE document");
    Utilities.sleep(sleepINT);


  var file = DriveApp.getFileById(doc.getId());
  var newfolder = DriveApp.getFolderById("1oQ8evDj8dlHoDdX01DvZqjcIkSq31oen");
  var oldfolder = DriveApp.getFolderById("1IzY9PiobBC-O87AxCkU32j2n2wUU1zUE");
  newfolder.addFile(file);
  oldfolder.removeFile(file);

  ss.toast("PDF has been created!");
  Utilities.sleep(sleepINT);

  var usernamefordoctitle = sheet.getRange(4,1,1,1).getValues()
  var name = doc.getName();
  doc.setName(month + " ALE for " + studentName);
  ss.toast("Document has been named");
  Utilities.sleep(sleepINT);

  doc.saveAndClose();
  var pdffolder = DriveApp.getFolderById ("1iwBEUZpFwz_eaCVKemYozF5FA0_t0YGv");
  var pdfFILE = DriveApp.getFileById(doc.getId()).getAs('application/pdf');
  pdfFILE.setName(doc.getName() + ".pdf");
  var theFile = DriveApp.createFile(pdfFILE);
  pdffolder.addFile(theFile);
  ss.toast("Document has been saved to Google Drive");
  Utilities.sleep(sleepINT);

  var pdfEMAIL = DriveApp.getFileById(doc.getId()).getAs('application/pdf').getBytes();
  var message = "This is your" + month + "ALE documents for your AG student."
  var emailTo = emailAddress;
  var subject = "Your " + month + " ALE for " + studentName + " ?";
  var message = "The attached pdf document is your " + month + " monthly ALE document for " + studentName + ".";

  MailApp.sendEmail(emailTo, subject, message, {attachments: pdfFILE});
  ss.toast("Email has been sent");
}  
  Utilities.sleep(sleepINT);
  ss.toast("? FINISHED!!!! ?");
}

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

ПРИМЕЧАНИЕ. Следующий ссылочный код в этом ответе был введен ОП на ревизия 3 .

Блок операторов после var row = data[i++]; не является частью цикла for, цикл for включает только один оператор.

for (i = 0; i < data.length ; i++) 
    var row = data[i++];

Хотя JavaScript очень гибок, может быть полезно, особенно для тех, кто не знает ни о каком конкретном руководстве по стилям JavaScript, использовать тот же стиль, который используется в примерах, включенных в https://developers.google.com/apps-script

  1. Начать блоки операторов в одной строке

    Пример 1:

    function myFuncion(){
    
    }
    

    Пример 2:

    for(var i = 0;i < data.length; i++){
    
    }
    
  2. Используйте линейные ограничители ;

  3. и т.д.

0 голосов
/ 31 августа 2018

Я довольно простой с циклами, но разве они не должны быть такими:

for (i = 0; i < data.length ; i++){ <--- the curly brace here.

попробуйте это?

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