我想要一个脚本在单元格 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));
}
我在 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));
}