javascript - 有没有办法防止从脚本创建多个文件
问题描述
我现在正在开发一个项目,通过使用脚本从谷歌表自动创建 pdf 文件。
但是,我遇到了一个问题,即每次我想创建 pdf 文件,之前已经创建的文件也被重新创建。所以,我想知道这个问题是否有解决方案。
function createBulkPDFs() {
const docFile = DriveApp.getFileById("xxxxxxx");
const tempFolder = DriveApp.getFolderById("xxxxxx");
const pdfFolder = DriveApp.getFolderById("xxxxxxx");
const currentSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("xxxxxxxx");
const data = currentSheet.getRange(2, 2,currentSheet.getLastRow()-1,6).getValues();
data.forEach(row => {
createReport(row[0],row[1],row[2],row[3],row[4],row[5], docFile,tempFolder,pdfFolder, row[4] + " " + row[0]);
});
}
function createReport(date,location,weather,department,projectname,contractor,docFile,tempFolder,pdfFolder,pdfName) {
const tempFile = docFile.makeCopy(tempFolder);
const tempDocFile = DocumentApp.openById(tempFile.getId());
const body = tempDocFile.getBody();
body.replaceText("{date}",date); //row 0
body.replaceText("{location}",location); //row 1
body.replaceText("{weather}",weather); //row 2
body.replaceText("{department}",department); //row 3
body.replaceText("{projectname}",projectname); //row 4
body.replaceText("{contractor}",contractor); //row 5
tempDocFile.saveAndClose();
const pdfContentBlob = tempFile.getAs(MimeType.PDF);
pdfFolder.createFile(pdfContentBlob).setName(pdfName);
}
所有学分都转到https://www.youtube.com/watch?v=r9uU_KwGgzQ&t=27s 提前感谢您的回答
解决方案
一种选择是添加一个新列来跟踪已为其创建文件的行。在这种情况下,您可以过滤data
数组以仅保留未处理的行。您还需要更新电子表格以在创建文件后将该行标记为已处理。
如果不会有两个同名的文件,也许更简单的选择是在创建之前在文件夹中查找文件。扩展您发布的代码段:
function createReport(date,location,weather,department,projectname,contractor,docFile,tempFolder,pdfFolder,pdfName) {
// Return if a file with that name already exists
if (pdfFolder.getFilesByName(pdfName).hasNext()) {
return;
}
const tempFile = docFile.makeCopy(tempFolder);
const tempDocFile = DocumentApp.openById(tempFile.getId());
const body = tempDocFile.getBody();
body.replaceText("{date}",date); //row 0
body.replaceText("{location}",location); //row 1
body.replaceText("{weather}",weather); //row 2
body.replaceText("{department}",department); //row 3
body.replaceText("{projectname}",projectname); //row 4
body.replaceText("{contractor}",contractor); //row 5
tempDocFile.saveAndClose();
const pdfContentBlob = tempFile.getAs(MimeType.PDF);
pdfFolder.createFile(pdfContentBlob).setName(pdfName);
}
推荐阅读
- python - 如何使用 discord.py 在服务器上识别 Mass Mention?
- javascript - 将类 setState 转换为功能组件
- android - 如何从房间中删除最喜欢的项目
- python - 我怎样才能刮掉pdf的几页?
- solidity - Solidity 智能合约抛出错误“发送”和“转移”仅适用于“应付地址”类型的对象,而不是“地址”类型的对象
- json - 在谓词为真时计算元素
- javascript - 更改事件未从反应页面上的外部脚本触发
- database - ERD 关系基数 - 反向放置符号会更好吗?
- python - Windows 上 Ubuntu 中的 Python 模块
- css - Material UI Theme Overrides how to correctly update gap between label and input