首页 > 解决方案 > 有没有办法防止从脚本创建多个文件

问题描述

我现在正在开发一个项目,通过使用脚本从谷歌表自动创建 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 提前感谢您的回答

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


一种选择是添加一个新列来跟踪已为其创建文件的行。在这种情况下,您可以过滤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);
  
}

推荐阅读