>source

Google Apps Script를 사용하여 Google 드라이브에서 두 가지 작업을 수행하려고합니다.

  • Google 문서 템플릿에서 파일을 만들고이 파일에 데이터 삽입
  • 이 Google 문서 파일을 Google 드라이브 내의 PDF 파일로 내보내기 (동시에)
  • 1 단계가 작동 중입니다. Google 문서 파일이 내부에서 업데이트 된 값으로 생성되었습니다.

    2 단계 : 두 가지 질문/문제가 있습니다.

  • PDF를 생성하기 위해 찾은 코드는 모든 Google 문서 파일을 PDF 파일로 변환하기 위해 만들어졌지만 제 측에서는 생성 된 파일을 내보내거나 변환하면됩니다 (이미 폴더에있는 모든 파일이 아님).
  • 포인트 1에도 불구하고 스크립트가 작동하고 PDF가 생성되었지만 PDF 파일을 열면 그 안에 추가 된 값이 손실되고 템플릿에 태그 만 있습니다.
  • 아이디어가 있습니까?

    다음은 코드입니다.

    function replaceTags () {
     // Global vars
      var ui = DocumentApp.getUi ();
      var date = Utilities.formatDate(new Date(), "GMT", "dd-MM-yyyy");
      var folderOutId = 'xxxxxxxxxxxxxxxxxxxx';
      var tplMaintenanceId = 'xxxxxxxxxxxxxxxxxxxx';
      var fileOutName = 'my file name';
      var clientCompany = ui.prompt ('Company Name :');
      
      // Do a copy from template file to a new file inside a specific folder
      targetFolder = DriveApp.getFolderById (folderOutId);
      var documentId = DriveApp.getFileById (tplMaintenanceId). makeCopy (targetFolder). getId ();
          
      // Rename filed copied
      DriveApp.getFileById (documentId) .setName (fileOutName + ' - ' + clientCompany.getResponseText ());
          
      // Add document body inside variable
      var body = DocumentApp.openById (documentId) .getBody ();
        
      // Insert data inside Google Doc document
      body.replaceText ('##DATE##', date);
      body.replaceText ('##CLIENT_COMPANY##', clientCompany.getResponseText ());
      
      gdocToPDF(documentId);
    }
    function gdocToPDF(fileID) {
      var documentRootfolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxx") // replace this with the ID of the folder that contains the documents you want to convert
      var pdfFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxx"); // replace this with the ID of the folder that the PDFs should be put in. 
      
      var docFile = DriveApp.getFileById(fileID)
      
      createPDF(docFile.getId(), pdfFolder.getId(), function (fileID, folderID) {
        if (fileID) createPDFfile(fileID, folderID);
      }
     )
    }
    function createPDF(fileID, folderID, callback) {
        var templateFile = DriveApp.getFileById(fileID);
        var templateName = templateFile.getName();
        
        var existingPDFs = DriveApp.getFolderById(folderID).getFiles();
        //in case no files exist
        if (!existingPDFs.hasNext()) {
            return callback(fileID, folderID);
        }
        for (; existingPDFs.hasNext();) {
            var existingPDFfile = existingPDFs.next();
            var existingPDFfileName = existingPDFfile.getName();
            if (existingPDFfileName == templateName + ".pdf") {
                Logger.log("PDF exists already. No PDF created")
                return callback();
            }
            if (!existingPDFs.hasNext()) {
                Logger.log("PDF is created")
                return callback(fileID, folderID)
            }
        }
    }
    function createPDFfile(fileID, folderID) {
        var templateFile = DriveApp.getFileById(fileID);
        var folder = DriveApp.getFolderById(folderID);
        var theBlob = templateFile.getBlob().getAs('application/pdf');
        var newPDFFile = folder.createFile(theBlob);
        var fileName = templateFile.getName().replace(".", ""); //otherwise filename will be shortened after full stop    
        newPDFFile.setName(fileName + ".pdf");
    }
    
    

    • 답변 # 1

      코드를 다시 만들려고했고 문서를 pdf로 성공적으로 변환했습니다.

      할 수있는 일은 PDF로 변환 할 문서 만 허용하도록 gdocToPDF () 함수를 편집하는 것입니다. 아래 샘플 코드를 참조하십시오 (원하는 방식이 아닐 수도 있음).

      replaceTags () 함수에 사용 된 문서 ID를 gdocToPDF ()에 전달합니다.

      function replaceTags () {
       ....
       .... 
        DocumentApp.openById(documentId).saveAndClose()
        gdocToPDF(documentId);
      }
      
      

      드라이브 폴더의 모든 파일을 가져 오는 대신이 코드를 사용하여 대체 된 태그 만있는 파일을 사용하십시오.

      function gdocToPDF(fileID) { 
        var documentRootfolder = DriveApp.getFolderById(folder-id) // replace this with the ID of the folder that contains the documents you want to convert
        var pdfFolder = DriveApp.getFolderById(folder-id); // replace this with the ID of the folder that the PDFs should be put in. 
        
        var docFile = DriveApp.getFileById(fileID)
        
        createPDF(docFile.getId(), pdfFolder.getId(), function (fileID, folderID) {
          if (fileID) createPDFfile(fileID, folderID);
        }
       )
      }
      
      

      이렇게하면 변환하려는 유일한 문서로 문서를 pdf로 변환 할 수 있습니다.

      앞으로 좋은 하루 되세요!

    관련 자료

  • 이전 javascript - AFrame의 js에서 동적으로 이벤트 방출
  • 다음 Java 람다에서 여러 변수를 매핑하는 방법은 무엇입니까?