google-apps-script - 在 Google Sheet 中创建 PDF 循环
问题描述
该功能只工作一次。它根本不循环。
通过将 for 循环参数更改为仅数字并更改行的位置来进行调整。
function PDFAbsensi() {
var sourceSpreadsheet = SpreadsheetApp.getActive();
// Get active sheet.
var sheets = sourceSpreadsheet.getSheets();
var sheetName = sourceSpreadsheet.getActiveSheet().getName();
var sourceSheet = sourceSpreadsheet.getSheetByName('PRINT ABSENSI');
// Set the output filename.
var idkelompok = sourceSheet.getRange(2,36).getValues();
var namakelompok = sourceSheet.getRange(2,2).getValues();
var nomorkelompok = sourceSheet.getRange(2,3).getValues();
var pdfName = idkelompok + " - " + namakelompok + " " + nomorkelompok;
// export url
var url = 'https://docs.google.com/spreadsheets/d/'+sourceSpreadsheet.getId()+'/export?exportFormat=pdf&format=pdf' // export as pdf / csv / xls / xlsx
+ '&gid='+sourceSpreadsheet.getSheetByName('PRINT ABSENSI').getSheetId();
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + token} });
var parents = DriveApp.getFileById(sourceSpreadsheet.getId()).getParents();
if (parents.hasNext()) {
var folder = parents.next();}
else {
folder = DriveApp.getRootFolder();}
// Loop
var jumlahpdf = sourceSheet.getRange(5,36).getValue();
for (i=0;i<jumlahpdf;i++) {
var theBlob = response.getBlob().setName(pdfName+'.pdf');
// delete pdf if already exists
var files = folder.getFilesByName(pdfName+'.pdf');
while (files.hasNext())
{files.next().setTrashed(true);}
// create pdf
var newFile = folder.createFile(theBlob);
return true;
// Delete the wasted sheet we created, so our Drive stays tidy.
DocsList.getFileById(newSpreadsheet.getId()).setTrashed(true);
// Add the number for looping function
var updatenomorkelompok = sourceSheet.getRange(2,36).setValue(idkelompok-(-1));}}
我希望代码能够创建多个 PDF 文件。截至目前,它每次运行时只制作一个。
解决方案
问题:
你在你的循环return true
中间。for
解释:
在第return
一个循环中完全结束函数。这是预期的行为,见下文MDNreturn
文档:
return 语句结束函数执行并指定要返回给函数调用者的值。
例子:
下面是一个基本for
循环,它记录i
每次运行的值:
for (i = 0; i < 3; i++) {
console.log(i);
}
这会按预期记录每次迭代。
这是您正在使用的 return 语句的示例(相同的for
循环,但在return true
内部):
testReturn();
function testReturn() {
for (i = 0; i < 3; i++) {
console.log(i);
return true;
}
}
当调用这个函数时,我们得到一个 0 的日志条目(第一次运行),但是当我们正在return
执行时,函数执行结束了,因此你的脚本只处理第一个 PDF。
推荐阅读
- python - Spotipy - 输入任何类型的用户名并询问登录信息
- javascript - dotenv 不适用于无服务器/webpack
- c# - 如何使用 model.id 动态生成 HTML 属性值?
- c# - 如何在选择子句中使用表达式
- spring - 使用 mongo 数据分页提高性能
- jasmine - Karma/Jasmine/PhantomJS “TypeError:_this.handler.handle 不是函数”
- image - 如何在左右隔室(半)中划分大脑分段切片?
- r - 分组数据 R 中的缺失值
- powershell - 查找服务和流程
- ssl - GlassFish 5 有效的 SSL 证书慢速 https 错误尝试刷新数据时超出写入超时