LoginSignup
4
2

More than 5 years have passed since last update.

Google Drive上で特殊文字を含むファイル名のファイルを取得したい

Posted at

概要

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をご参照ください。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2