ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Google Docs를 생성했을 때 Google Sheets에 문서 정보 가져와 목록화 하기
    AppsScript 2023. 12. 1. 21:36

    Google Docs와 Google Sheets를 사용하여 Google Drive의 특정 폴더에서 새 문서가 생성될 때마다 해당 문서의 제목, 내용, 썸네일 URL, 대체 링크를 Google Sheets에 자동으로 기록하는 작업은 Google Apps Script를 이용해 구현할 수 있습니다. 

     

    이를 위해 다음 단계를 따르면 됩니다:

    1. Google Apps Script 프로젝트 생성: Google Drive에서 새 Google Apps Script 프로젝트를 생성합니다.
    2. 스크립트 작성: Google Drive API를 사용하여 특정 폴더를 모니터링하고, 새 문서가 생성될 때 해당 문서의 정보를 추출하는 스크립트를 작성합니다.
    3. Google Sheets API 사용: 추출한 정보를 Google Sheets에 기록하기 위해 Google Sheets API를 사용합니다.
    4. 정기적 실행을 위한 트리거 설정: 이 스크립트가 정기적으로 실행되도록 타이머 기반 트리거를 설정합니다.

    이러한 스크립트를 작성하고 실행하기 위해서는 Google Apps Script에 대한 기본적인 지식이 필요합니다. 스크립트 작성은 사용자의 요구 사항에 따라 달라질 수 있으며, Google Apps Script 문서 및 관련 커뮤니티에서 추가적인 정보와 예제를 찾을 수 있습니다.

     

    스크립트 예시

    Google Apps Script를 사용하여 Google Drive의 특정 폴더를 모니터링하고, 새 Google Docs 문서가 생성될 때 해당 문서의 제목, 내용, 썸네일 URL, 대체 링크를 Google Sheets에 기록하는 스크립트 예시는 다음과 같습니다.

     

    function monitorFolderAndLogToSheet() {
    
      var folderId = 'YOUR_FOLDER_ID'; // 특정 폴더의 ID
    
      var sheetId = 'YOUR_SHEET_ID'; // 기록할 Google Sheets의 ID
    
      var folder = DriveApp.getFolderById(folderId);
    
      var files = folder.getFiles();
    
      var sheet = SpreadsheetApp.openById(sheetId).getActiveSheet();
    
    
    
      while (files.hasNext()) {
    
        var file = files.next();
    
        if (file.getMimeType() === MimeType.GOOGLE_DOCS) {
    
          var docId = file.getId();
    
          var doc = DocumentApp.openById(docId);
    
          var docBody = doc.getBody().getText();
    
          var docTitle = doc.getName();
    
          var thumbnailUrl = file.getThumbnailLink();
    
          var alternateLink = file.getAlternateLink();
    
    
    
          // Google Sheets에 정보 기록
    
          sheet.appendRow([docTitle, docBody, thumbnailUrl, alternateLink]);
    
        }
    
      }
    
    }

    이 코드는 지정된 폴더 내의 모든 파일을 순회하며 Google Docs 문서를 찾아, 해당 문서의 정보를 Google Sheets에 기록합니다. 이 스크립트를 사용하기 전에, 'YOUR_FOLDER_ID'와 'YOUR_SHEET_ID'를 해당 폴더와 시트의 실제 ID로 교체해야 합니다. 또한, 이 스크립트는 매번 실행될 때마다 폴더 내의 모든 문서를 처리하므로, 이미 처리된 문서를 다시 처리하지 않도록 로직을 추가하는 것이 좋습니다.

     

    구글 드라이브 폴더 ID 확인하는 방법

    Google Drive에서 특정 폴더의 ID를 찾는 방법은 다음과 같습니다:

     

    • Google Drive 열기: 먼저 Google Drive에 로그인합니다.
    • 폴더 선택: 모니터링하고자 하는 폴더를 찾아 클릭합니다.
    • 웹 주소 확인: 폴더를 열면, 웹 브라우저의 주소창에 폴더의 URL이 표시됩니다. 이 URL은 대략 다음과 같은 형태를 가집니다: https://drive.google.com/drive/folders/[폴더ID]
    • 폴더 ID 복사: URL에서 'folders/' 뒤에 나오는 문자열이 해당 폴더의 고유 ID입니다. 이 ID를 복사하여 사용하면 됩니다.

     

    예를 들어, 주소가 https://drive.google.com/drive/folders/1A2B3C4D5E6F7G8H9I0J라면, '1A2B3C4D5E6F7G8H9I0J'가 해당 폴더의 ID입니다. 이 ID를 Google Apps Script에서 사용할 때는 'YOUR_FOLDER_ID' 부분을 이 ID로 교체하면 됩니다.

     

    에러 해결

    TypeError: file.getThumbnailLink is not a function
    monitorFolderAndLogToSheet @ Code.gs:15

    방법: file.getThumbnailLink() 함수가 TypeError를 발생시키는 문제는, Google Apps Script에서 Google Docs 파일의 썸네일 링크를 직접 얻을 수 없기 때문에 발생합니다. Google Docs 파일은 썸네일을 API를 통해 직접 제공하지 않습니다. 자피어에서는 가능해서 가능할거 같았는데 앱스크립트에서는 미지원으로 해당 내역 삭제

    function monitorFolderAndLogToSheet() {
      var folderId = 'YOUR_FOLDER_ID'; // 특정 폴더의 ID
      var sheetId = 'YOUR_SHEET_ID'; // 기록할 Google Sheets의 ID
      var folder = DriveApp.getFolderById(folderId);
      var files = folder.getFiles();
      var sheet = SpreadsheetApp.openById(sheetId).getActiveSheet();
    
    
    
      while (files.hasNext()) {
    
        var file = files.next();
    
        if (file.getMimeType() === MimeType.GOOGLE_DOCS) {
    
          var docId = file.getId();
          var doc = DocumentApp.openById(docId);
          var docBody = doc.getBody().getText();
          var docTitle = doc.getName();
          var alternateLink = file.getAlternateLink();
    
          // Google Sheets에 정보 기록 (썸네일 URL 제외)
          sheet.appendRow([docTitle, docBody, alternateLink]);
        }
      }
    }

    이 스크립트는 Google Docs 문서의 제목, 내용, 대체 링크를 Google Sheets에 기록합니다. 썸네일 URL 부분은 Google Docs 파일에 적용되지 않으므로, 이 부분을 스크립트에서 제거했습니다.

     

    에러 2

    Exception: Unexpected error while getting the method or property openById on object SpreadsheetApp.
    monitorFolderAndLogToSheet @ Code.gs:6

    SpreadsheetApp.openById() 메서드에서 오류가 발생하는 것은 일반적으로 제공된 ID가 Google Sheets의 ID가 아니기 때문입니다.

    • 올바른 Sheets ID 사용: 스크립트에서 YOUR_SHEET_ID를 교체할 때 올바른 Google Sheets 문서의 ID를 사용했는지 확인하세요. Google Sheets 문서의 URL에서 ID를 찾을 수 있습니다. URL 형식은 대략적으로 https://docs.google.com/spreadsheets/d/[여기에 ID가 있습니다]/edit#gid=0와 같습니다.
    • 접근 권한 확인: 스크립트를 실행하는 Google 계정이 해당 Google Sheets 문서에 접근할 수 있는 권한을 가지고 있는지 확인하세요.
    • ID 형식 확인: ID를 복사하고 붙여넣을 때 추가 공백이나 잘못된 문자가 없는지 다시 한 번 확인하세요.

    에러 3

    TypeError: file.getAlternateLink is not a function
    monitorFolderAndLogToSheet @ Code.gs:15

    file.getAlternateLink() 메서드로 발생하는 TypeError 오류는 Google Apps Script가 최근 업데이트에서 DriveApp.File 객체의 getAlternateLink() 메서드를 제거하거나 사용 중단했기 때문에 발생합니다. 

     

    대신, 문서의 URL을 얻기 위해 getUrl() 메서드를 사용할 수 있습니다. 이 메서드는 파일의 보기 가능한 웹 주소를 반환합니다. 스크립트에서 해당 부분을 수정합니다.

     

    에러 4

    ReferenceError: docUrl is not defined
    monitorFolderAndLogToSheet @ Code.gs:18

    스크립트에서 docUrl 변수를 url로 선언했지만, 나중에 docUrl이라는 이름으로 참조하려고 해서 ReferenceError가 발생했습니다. docUrl 대신 url을 사용해야 합니다. 이 부분을 수정하면 오류가 해결됩니다

     

    문서 정보 가져올 수 있는 항목

    Google Apps Script를 사용하여 Google Docs 문서에서 가져올 수 있는 정보는 다음과 같습니다:

     

    • 문서 제목: 문서의 제목을 얻을 수 있습니다.
    • 문서 내용: 문서의 전체 텍스트 내용을 추출할 수 있습니다.
    • 문서 URL: 문서의 웹 URL을 얻을 수 있습니다.
    • 생성 및 수정 날짜: 문서가 생성되거나 마지막으로 수정된 날짜를 얻을 수 있습니다.
    • 소유자 및 공동 작업자 정보: 문서의 소유자 및 공동 작업자 목록을 확인할 수 있습니다.
    • 문서 권한 및 공유 설정: 문서의 공유 및 액세스 권한 설정을 확인할 수 있습니다.

    이 정보들은 Google Apps Script의 Google Drive API와 Google Docs API를 통해 접근하고 추출할 수 있으며, 스크립트를 통해 자동화된 방식으로 Google Sheets 등 다른 서비스에 기록하거나 사용할 수 있습니다.

     

    트리거의 설정

    Google Apps Script에서는 폴더가 업데이트될 때마다 자동으로 트리거되는 기능은 직접적으로 지원하지 않습니다. Google Apps Script의 기존 트리거는 시간 기반(예: 매일, 매시간) 또는 이벤트 기반(예: 스프레드시트가 열릴 때, 폼 제출시)으로 실행되도록 설계되어 있습니다.

     

    하지만 폴더 내의 변화를 감지하고자 할 때 사용할 수 있는 대안적인 방법들은 다음과 같습니다:

    • 시간 기반 트리거 사용: 정기적으로 스크립트를 실행하여 폴더의 최근 변경 사항을 확인합니다. 예를 들어, 매일 또는 매시간마다 스크립트를 실행하여 새로운 파일을 확인하고 처리할 수 있습니다.
    • 변경 로그 유지: 스크립트가 실행될 때마다 처리한 파일의 로그를 유지하고, 다음 실행 때 이미 처리된 파일을 건너뛰는 로직을 구현합니다.

    이러한 방식으로 폴더의 변경 사항을 간접적으로 감지하고 대응할 수 있습니다.

     

    An illustration representing the concept of importing document information from Google Docs into Google Sheets for organization.
    An illustration representing the concept of importing document information from Google Docs into Google Sheets for organization.

     

Designed by Tistory.