我想要一个脚本在单元格 B5 中插入学生 ID,然后下载 sheet 并将其导出为 PDF,并使用学生 ID 命名文件

I want a script to insert a student ID number in cell B5, and then download & export the sheet as a PDF, naming the file with the student's ID

我在 Google 工作表中有一份学生进度报告,它根据在单元格 B5 中输入的唯一学生 ID 填充数据(使用查询、过滤器、vlookup、迷你图等)。这对我作为老师来说非常有用,可以在屏幕上单独向学生展示。但是,我校想用这份报告来传达给所有的学生和家长。

对于一千名学生来说,这在逻辑上几乎是不可能的。有没有办法编写一个脚本,自动在 B5 中输入学生 ID,将其下载为 PDF 并使用学生 ID 编号命名文件?然后对下一个学号重复这个过程?

我一直在努力工作以完成这项工作,但现在在如何与学生和家长共享这些信息(同时保护发现的全校数据的隐私等)方面遇到了瓶颈在隐藏的工作表中)。我知道如何使用公式,甚至是更“高级”的公式,但编写脚本还不是我能做的事情。如果我能找到一个接近我想要完成的目标,我就知道足以进行小的定制,但我真的迷失在这个上。如果有人有任何想法或可以帮助我,我将不胜感激!

这是草稿

function saveAllAsPDF(){
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh1 = ss.getSheetByName('IMPORT Masterlist');       
  const sh2 = ss.getSheetByName('Student Progress Report');            
  sh1.getRange('A2:A'+sh1.getLastRow()).getValues().flat().forEach(id => {
    if (id != '') {
      sh2.getRange('B5').setValue(id)
      SpreadsheetApp.flush();
      savePDF()
    }
  })
}

function savePDF(){
  const folderID = '1N0AIh5oEszYw_NXKD0Vx1XrXUiPuUadR';
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getSheetByName('Student Progress Report');      
  const d = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy-MM-dd")
  const filename = sh.getRange('B5').getValue() + '_' + d + ".pdf"
  const url = 'https://docs.google.com/spreadsheets/d/' + ss.getId() + '/export?';
  const exportOptions =
    'exportFormat=pdf&format=pdf' + 
    '&size=A4' + 
    '&portrait=true' +                     
    '&fitw=true' +                        
    '&sheetnames=false&printtitle=false' + 
    '&pagenumbers=false&gridlines=false' + 
    '&fzr=false' +
    '&gid=' + sh.getSheetId();
  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
  var response = UrlFetchApp.fetch(url + exportOptions, params).getBlob();
  DriveApp.getFolderById(folderID).createFile(response.setName(filename));
}