【GAS】Exception: The document is inaccessible. Please try again later.の解消法
GASで以下のようなエラーが出ているのではないでしょうか。
今回は、このエラーの原因とよく起こりやすい事例、解消法を解説していきます。
実際のコードを使用して紹介していくので、ぜひそのまま使ってみてください。
また、紹介するコードは私が事前に全てテストしているものですので、安心して使ってみていただければと思います!
では、早速エラーについて見ていきましょう!
目次(クリックで読みたい部分にジャンプできます)
【原因】word形式を指定していると発生する
今回の事象の原因は、Googleドライブ上にあるword形式のファイルをDocumentAppで開こうとしてしまったことです。
例えば、以下のようなコードで発生します。
const id = "***************";//ドキュメントID
const document = DocumentApp.openById(id);//ここでエラー発生
そのため、word形式のファイルをDocumentAppで開くには、
word形式をGoogleドキュメント形式に書き換えなければいけません。
2つの解決法
解決法は以下の2つです。
- word形式を手動でコピーして作り直す
- GASにてword→ドキュメントに変換するコードを組む
では、それぞれ見ていきましょう。
【解決法①】word形式を手動でコピーして作り直す。
word形式を手動でドキュメント形式に直すのは、そんな大変ではなく、ワンステップで完了できます。
①まず対象のwordファイルを開きましょう。
ファイルから「Googleドキュメントとして保存」を選択します。
そうすることで、Googleドキュメント形式のファイルが保存されます。
作成されたGoogleドキュメントから再度ドキュメントIDを取得して、指定すればうまく行くようになるはずです!!
【解決法②】GASにてword→ドキュメントに変換するコードを組む
もう一つの方法は、GASのコード内でword形式のファイルをドキュメント形式に変換するコードを組み込むことです。
コードの概要
①ファイルに対して、wordファイルかどうか判定するif文を組む
②wordファイルだったものに対して、ドキュメントへの変換をする。
次に実装に必要な前準備をします。
以下の2つが必要です。
前準備
Drive API の準備
サービスから、「Drive API」を選択しておきましょう。
※バージョンはv2を入れてください。
v3もありますが、今回のコードでは使用できまないです。
ここまで、準備ができたら早速コードから見ていきましょう。
var fileId = "***************";//ドキュメントID
let file = DriveApp.getFileById(fileId);
var mimeType = file.getMimeType();
if (mimeType === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') {
console.log('word形式でした。')
// Word ファイルを取得して Google ドキュメント形式に変換
var blob = file.getBlob();
var resource = {
title: file.getName(),
mimeType: MimeType.GOOGLE_DOCS
};
file = Drive.Files.insert(resource, blob); // Googleドキュメントとしてファイルをインサート
}
const document = DocumentApp.openById(file.getId());
if文で、word形式かどうかを判定しています。
word形式だとmimeTypeが「application/vnd.openxmlformats-officedocument.wordprocessingml.document」になるので、それを利用しています。
その後、新たにファイルを作り直す際にmimeTypeを「GOOGLE_DOCS」に指定して行います。
そうすることで、新たに作成されたファイルがGoogleドキュメント形式になり、
当初の予定通り、DocumentApp.openByIdを使用することができます。
ファイルが複数ある場合などは、コードを組む方が断然便利です。
最初は少し面倒ですが、ぜひ使って見てください!
chatGPTの以下方法はうまくいかない
chatGPT4にて聞いてみると以下のような方法を提案されます。
ただ、エラーになるので注意してください。
Drive APIを使った方法が一番無難な気がします。
// Word ファイルを取得して Google ドキュメント形式に変換
var blob = file.getBlob();
blob.setContentType(MimeType.GOOGLE_DOCS);
var newFile = DriveApp.createFile(blob);
まとめ
今回は、Exception: The document is inaccessible. Please try again later.の原因と解決法について紹介しました。
ぜひこちらの方法を使って見て、エラーが解決できたら嬉しいです!
ドキュメントを開く際によく使うコマンドですので、参考にして見てくださいね。
では、またどこかでお会いしましょう!