質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

6704閲覧

getFilesByNameで日本語のスプレッドファイル名が取得できない

yoneda666

総合スコア7

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2018/01/07 07:57

編集2018/01/08 02:26
コード ```GAS初心者です。 下記質問をする前にネットで色々検索してみたのですが、 答えが見つからなかったので質問させて頂いてます。 Googole ドライブ上に、日本語ファイル名のスプレッド(例:テストファイル) を作成。 var file = getFilesByName (“テストファイル”) を実行するとエラーメッセージで「イテレータが最後に到達しました」 と表示されて処理が進みません。 GAS上で、日本語ファイル名を扱いたい場合に何か特殊な設定や、 プログラム中に必要な定義等有れば教えてください。 よろしくお願いします。 '18/01/08 上記Qのコードとエラーメッセージを追記 ```GAS function myFunction() { var file = DriveApp.getFilesByName("テストファイル1").next(); GmailApp.sendEmail('xxxx@xx.xx.xx', 'テストメール', '本文テスト', { attachments: [file], from: 'XXXX@XXXX.xx', name: 'XXXX' }); }

【エラーメッセージ】
次のオブジェクトを取得できません。イテレータが末尾に到達しました。(行 2、

ちなみに、以下のコードを実行するとログにはファイル名が
出力されます。

GAS

1function myFunction() { 2 var finfo = DriveApp.getFiles(); 3 4 for (i=1;finfo.hasNext();i++) { 5 var fname = finfo.next() 6 Logger.log(fname); 7 } 8}

【ログの内容】
[18-01-08 09:12:54:651 JST] テストファイル1

【コード修正を修正】
ご指摘通りコードを修正してみました。
実行したらエラーにはならず、日本語ファイル名が変数に入ってきました。
何故でしょう?

GAS

1function myFunction() { 2// var finfo = DriveApp.getFiles(); 3 var finfo = DriveApp.getFilesByName("テストファイル1"); 4 5 for (i=1;finfo.hasNext();i++) { 6 var fname = finfo.next() 7 Logger.log(fname); 8 } 9}

【実行結果】
[18-01-08 11:18:59:702 JST] テストファイル1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/01/07 08:05

日本語でなければみつかりますか?
yoneda666

2018/01/07 08:14

はい。英字であれば見つかります。一応存在を確認する為に、getFiles()を発行すると当該ファイル名がlog出力されました。しかしながら、getFileByNameではエラーになるのです。
Zuishin

2018/01/07 08:24

その部分のスクリプトを書き写すのではなくコピペしてもらえますか? コメント欄ではなく質問に追記する形で、コードブロックも使ってインデントが消えないようにしてください。
yoneda666

2018/01/07 09:24

ご指摘、有難うございます。明日、コードやエラーメッセージを質問欄に記載させていただきます。
Zuishin

2018/01/08 00:52

関数名が同じ myFunction ですが、記憶で書いたものではなくコピペしましたか? どういうことでしょうか?
yoneda666

2018/01/08 01:00

両コードレス共に別々のプロジェクトです。
Zuishin

2018/01/08 01:06

では下のスクリプトを書き換えて DriveApp.getFiles(); を DriveApp.getFilesByName("テストファイル1"); にするとどうなりますか? 新しくプロジェクトを作らず、現在ある下のスクリプトを書き換えてください。
guest

回答2

0

ベストアンサー

プロジェクトを変更したら解決したとのことなので、おそらくスクリプトが問題なのではなく別の権限で動いていたんだと思います。
sendEmail を使った際には、どのアカウントで実行するか最初に尋ねられます。
別のアカウントからテストファイル1にアクセスできなかったのでしょう。

投稿2018/01/08 02:28

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoneda666

2018/01/08 02:38

早々のご回答ありがとうございました。権限部分についてはまた調べてみます。 度々ご回答・指導頂きありがとうございました。
guest

0

こんにちは。
下記でいかがでしょうか。

javascript

1 var files = DriveApp.getFilesByName("テストファイル"); 2 var file = files.next(); 3 Logger.log(file.getId()); //同じ名前のファイルがなければ、表示されるIDは目的のファイルになるはずです。

「getFilesByName」で戻ってくるのは、ファイルそのものではないので、
「.next()」で取り出せばよいかと。

※同名のファイルが2つ以上存在するのであれば、IDで識別する必要があります。

投稿2018/01/07 09:09

yuiBlue

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoneda666

2018/01/07 09:26

わざわざ私の為にすみません。記載の感じです。明日、改めてコードを記載させて頂きます。大変お手数をお掛けしてすみませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問