'Download Multiple Files at Once

Here in the code I edit a Google Document automatically by pasting its id to a certain sheet, change some variables (inputs are given in Input tab) and download a pdf version of it. Script first creates a Google Doc version of it and than creates pdf version of it. However, code can only operate for 1 row. How can I ensure it will operate for all rows. Many thanks

function openModalDialog() {
  const html = HtmlService.createHtmlOutputFromFile("Download").setTitle("Succeed");
  SpreadsheetApp.getUi().showSidebar(html);
}

function createDataUrl(type) {
  type = "pdf";
  const blob = CreateReport();
  
  const mimeTypes = { xlsx: MimeType.MICROSOFT_EXCEL, pdf: MimeType.PDF };
  
  return {
    data:
      `data:${mimeTypes[type]};base64,` +
      Utilities.base64Encode(blob.getBytes()),
    filename: `${blob.getName()}.${type}`,
  };
}
function CreateReport(){
  var id = SpreadsheetApp.getActiveSpreadsheet().getId();
  var rawdata = Sheets.Spreadsheets.Values.get(id,'Input!A2:Z');
  var linkdata = Sheets.Spreadsheets.Values.get(id,'Link!B1:B3');
  const ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const docid = ss.getRange("Link!B2").getValue();
  const pdfid = ss.getRange("Link!B3").getValue();
  const tempId = ss.getRange("Link!B1").getValue();
  const folderdoc = DriveApp.getFolderById(docid);
  const folderpdf = DriveApp.getFolderById(pdfid);
  const templateId = DriveApp.getFileById(tempId);
  for(var i = 0; i < rawdata.values.length; i++){
    var check = rawdata.values[i][11];
    if(check !== "Done"){
    var Name = rawdata.values[i][0];
    var var1 = rawdata.values[i][1];
    var var2 = rawdata.values[i][2];
    var var3 = rawdata.values[i][3];
    var var4 = rawdata.values[i][4];
    var var5 = rawdata.values[i][5];
    var var6 = rawdata.values[i][6];
    var var7 = rawdata.values[i][7];
    var var8 = rawdata.values[i][8];
    var var9 = rawdata.values[i][9];
    var var10 = rawdata.values[i][10];
    var newdoc = DriveApp.getFileById(tempId).makeCopy();
    var documentId = newdoc.getId();
    var doc = DocumentApp.openById(documentId);
    DriveApp.getFileById(documentId).setName(Name);
    var body = DocumentApp.openById(documentId).getBody();
    body.replaceText('#1#', rawdata.values[i][1]);
    body.replaceText('#2#', rawdata.values[i][2]);
    body.replaceText('#3#', rawdata.values[i][3]);
    body.replaceText('#4#', rawdata.values[i][4]);
    body.replaceText('#5#', rawdata.values[i][5]);
    body.replaceText('#6#', rawdata.values[i][6]);
    body.replaceText('#7#', rawdata.values[i][7]);
    body.replaceText('#8#', rawdata.values[i][8]);
    body.replaceText('#9#', rawdata.values[i][9]);
    body.replaceText('#10#', rawdata.values[i][10]);
    folderdoc.addFile(DriveApp.getFileById(documentId));
    doc.saveAndClose();
    var docblob = doc.getBlob();
    docblob.setContentType
    docblob.setName(doc.getName() + ".pdf");
    folderpdf.createFile(docblob);
    ss.getRange(i+2, 12).setValue("Done");
    SpreadsheetApp.flush();
    return docblob;
    }
  }
}

<h1>Downloading</h1>
<p>Please Wait...</p>

<script>
  google.script.run
      .withSuccessHandler(({ data, filename }) => {
        const a = document.createElement("a");
        document.body.appendChild(a);
        a.download = filename;
        a.href = data;
        a.click();
        google.script.host.close();
      })
      .createDataUrl("pdf");
</script>


Solution 1:[1]

In your if block once it does one it will not loop but simply returns. But if you wanted to do multiple Doc files then createDataUrl() would only work for 1 blob. So your logic escapes me.

for(var i = 0; i < rawdata.values.length; i++){
  var check = rawdata.values[i][11];
  if(check !== "Done"){
    ...
    return docblob;
  }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 TheWizEd