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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Q&A

解決済

1回答

435閲覧

Googleフォームでファイル名を回答情報に書き換えて保存

shiyuh

総合スコア21

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

0グッド

0クリップ

投稿2022/11/13 14:08

前提

Googleフォームで送られてきた音源ファイルを、名前を書き換えてドライブに保存するシステムを作っています。
保存する際のファイル名は、フォームの回答から得た情報に書き換えることとします。

実現したいことの例

❶質問1で、名前を収集する
❷同フォームから音源ファイルがアップされると、質問1で得た名前にファイル名が書き換えられてドライブに保存される

発生している問題・エラーメッセージ

エラー Exception: Unexpected error while getting the method or property getFileById on object DriveApp. at myFunction(音源:34:24)

該当のソースコード

ネットから引っ張ってっきたのを書き換えて作ったので若干変なところや不要なところがあるかもしれません

function

1 2//**シートオブジェクトの取得 3let sheetId = '########'; 4//**フォームの回答が反映されるシート 5let sheetName = 'フォームの回答 2';  6//**ここまでやったら、セル番号設定へ移動 7 8let sheet= SpreadsheetApp.openById(sheetId).getSheetByName(sheetName); 9//リネームした列を別シートに載せる 10 11//シート全体を配列化 12let values = sheet.getDataRange().getValues(); 13 14//先頭行(項目部分)を削除 15values.shift(); 16 17//空の配列 18let arr = []; 19 20for(let i = values.length-1; i >= 0; i--){ 21 //チーム名前を取得(何列目にチーム名あるか?) 22 let name = values[i][1]; 23 //ファイルの位置を取得(何列目にファイルがあるか?) 24 let filePath=values[i][10]; 25 26 //配列の中に同じ名前が無かったらarrの配列に入れる 27 //arr.flat().includes(name)は、arr内にnameがあるか見ている 28 //あったらtrue、無かったらfalseを返す。 29 if(!arr.flat().includes(neme)){ 30 arr.push(values[i]); 31 fileName = neme ; 32  let fileId = filePath.replace(/^.*\?id=/,''); 33  let files = DriveApp.getFileById(fileId); 34 //リネーム 35  files.setName(fileName); 36 } 37} 38 39}

補足

・このエラーは毎回出ますが、ファイルの保存自体はちゃんと行えています。
・二件ファイル未提出の回答がありましたが、それ以来の回答でファイル保存が成功してても毎回エラーメッセージが来るようになりました。

考えられること

❶フォームでファイルをアップせずに送信した場合にこのエラーが出るのかなと思います。
分岐で、”ファイルがアップされなかった場合はこのスクリプトを実行しない”ということはできますでしょうか?

❷ファイル共有の関係で、このシステムでファイルが保存されるドライブのフォルダ場所をフォーム解放後に移動しました。

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

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

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

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

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

guest

回答1

0

自己解決

ファイルがアップされた場合、されてない場合のif分岐でコード組み直したらうまく行きましたので自己解決します。

投稿2023/01/09 10:59

shiyuh

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問