본문 바로가기
개인기록/개발공부

[Troubleshooting] 구글 앱스 스크립트: "액세스할 수 없는 문서입니다" 완벽 해결법

by 심플리Do 2026. 1. 12.

1. 문제 현상

  • DocumentApp.openById() 실행 시 "액세스할 수 없는 문서입니다. 나중에 다시 시도해 주세요." 에러 발생.
  • 파일은 분명 생성되었고, 브라우저에서 수동으로 열면 잘 열리는데 스크립트(코드)로만 접근이 안 됨.
  • 특히 공유 드라이브(Shared Drive) 환경에서 빈번하게 발생.

2. 주요 원인

  1. 파일 형식 불일치 (가장 빈번): 템플릿 파일이 구글 문서 포맷이 아닌 MS Word(.docx) 형식인 경우. 구글 문서 API는 순수 구글 문서 포맷만 제어 가능함.
  2. 권한 전파 지연 (Indexing Delay): 공유 드라이브의 보안 정책상, 파일이 생성된 직후 편집 권한이 모든 구글 서버에 전파되는 데 시간이 걸림 (수 초 ~ 수 분).
  3. 서비스 충돌: DocumentApp이라는 고전적인 라이브러리가 공유 드라이브의 강화된 보안 정책을 통과하지 못함.

3. 해결 단계 (Checklist)

✅ Step 1. 파일 형식 확인 및 변환

  • 드라이브 아이콘이 파란색 **'W'**라면 Word 파일입니다.
  • 해결: 파일을 열고 **[파일] > [Google 문서로 저장]**을 클릭해 순수 구글 문서로 변환한 뒤, 그 새로운 ID를 사용하세요.

✅ Step 2. 대기 로직 추가 (Utilities.sleep)

  • 파일 복사 직후 바로 열지 말고 서버가 인지할 시간을 줍니다.
  • Utilities.sleep(2000); // 2초 대기

✅ Step 3. 최후의 수단: Google Docs API 직접 호출 (추천)

  • DocumentApp을 쓰지 않고 서버 간 통신(API)을 통해 문서를 직접 수정하는 방식입니다. 이 방식은 공유 드라이브 보안망을 가장 잘 우회합니다.
  • 방법:
    1. 스크립트 에디터 [서비스]에서 Google Docs API 추가.
    2. DocumentApp.openById() 대신 Docs.Documents.batchUpdate() 사용.

4. 성공한 우회 전략 코드 (Snippet)

 
// DocumentApp 없이 직접 치환하는 API 방식
const requests = [
  { 
    replaceAllText: { 
      replaceText: "치환될내용", 
      containsText: { text: "{{키워드}}", matchCase: false } 
    } 
  }
];

// Docs API를 호출하여 문서를 열지 않고 수정
Docs.Documents.batchUpdate({ requests: requests }, docId);

💡 정리 한줄 평: "공유 드라이브에서 문서가 안 열리면 파일이 .docx인지 확인하고, 그래도 안 되면 Docs API로 들이받자!"