概要
Google Driveにあるファイルについて、特殊文字を含むファイル名を持ったファイルがある場合にこれを取得できるようにします。特殊文字とは、例えばウムラウトのある文字(Ä, Ë, Ï など)やアキュート・アクセントのある文字(Á, É, Í など)、グレイヴ・アクセントのある文字(À, È, Ì など)、サーカムフレックスのある文字(Â, Ê, Î など)などです。
問題
例えばウムラウト(Ä, Ë, Ï)がファイル名に含まれていると、DriveApp.getFilesByName("ファイル名")
を使ってファイルを取得しようとしても取得することができません。日本語のファイル名はDriveApp.getFilesByName("ファイル名")
を使って問題なく取得することができます。
では検索してはどうかと思い、title="ファイル名"
あるいはname="ファイル名"
を試しましたが、うまくいきません。
解決方法
クエリをtitle=
ではなく、title contains
をつかうことで特殊文字を含んだファイルを取得できることが分かりました。
結果は単純なことだったですが、これに気付くのに少し時間を要してしまいましたので、もしも同様のことでお困りの方がおられるのならと思い、投稿させていただきました。
サンプルスクリプト
サンプルとして、"ÄÖÜÇÃÕÑÆŒØÞÁÉÍÓÚÝÀÈÌÒÙÂÊÎÔÛÄËÏÖÜ"をファイル名としてスプレッドシートを作成し、このファイルを取得します。もちろん、DriveApp.getFilesByName("ÄÖÜÇÃÕÑÆŒØÞÁÉÍÓÚÝÀÈÌÒÙÂÊÎÔÛÄËÏÖÜ")
では取得することはできません。
var files = DriveApp.getFilesByName("ÄÖÜÇÃÕÑÆŒØÞÁÉÍÓÚÝÀÈÌÒÙÂÊÎÔÛÄËÏÖÜ");
の代わりに
var files = DriveApp.searchFiles('title contains "ÄÖÜÇÃÕÑÆŒØÞÁÉÍÓÚÝÀÈÌÒÙÂÊÎÔÛÄËÏÖÜ"');
を使用します。
var files = DriveApp.searchFiles('title contains "ÄÖÜÇÃÕÑÆŒØÞÁÉÍÓÚÝÀÈÌÒÙÂÊÎÔÛÄËÏÖÜ"');
while (files.hasNext()) {
var file = files.next();
Logger.log("id=%s, name=%s", file.getId(), file.getName())
}
>>> id=#####, name=ÄÖÜÇÃÕÑÆŒØÞÁÉÍÓÚÝÀÈÌÒÙÂÊÎÔÛÄËÏÖÜ
無事に"ÄÖÜÇÃÕÑÆŒØÞÁÉÍÓÚÝÀÈÌÒÙÂÊÎÔÛÄËÏÖÜ"のファイルを取得することができました。
"ÄÖÜÇÃÕÑÆŒØÞÁÉÍÓÚÝÀÈÌÒÙÂÊÎÔÛÄËÏÖÜ"の文字列を含んだファイル名が1つしかない場合は、var file = DriveApp.searchFiles('title contains "ÄÖÜÇÃÕÑÆŒØÞÁÉÍÓÚÝÀÈÌÒÙÂÊÎÔÛÄËÏÖÜ"').next();
で取得することができます。このクエリを使用することで、Drive APIでもファイルを取得することができます。このサンプルは、Gistをご参照ください。