3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Googleフォームで取得した写真の名前を自動で変更(リネーム)する

Last updated at Posted at 2023-01-30

はじめに

Googleフォームで回収した写真って、
ファイル名が、{元のファイル名} – {ユーザ名}.{元のファイル拡張子}になっていて、
結局何の写真だ!?って困ってしまったことがあったので、
フォーム回収時にさらりとファイル名を変更するGASを組んでみました^^
つまづいたところと解決策も記載したので、参考になれば幸いです。

参考記事

・デプロイするまでの方法とベースになるコードが分かりやすい

・複数ファイルをアップロードする際のコードが分かりやすい

参考にしたコード

こちらをクリック

function myFunction(e) {
  var itemResponse;
  var fileName;
  var movie;
  
  //回答のオブジェクトを取得
  var itemResponses = e.response.getItemResponses();
  
  // お名前の回答結果を取得する
  itemResponse = itemResponses[0];
  fileName = itemResponse.getResponse() + '_' + dateToStr24HPad0(new Date(), 'YYYYMMDDhhmmss');
  
  // 投稿動画の回答結果を取得する
  itemResponse = itemResponses[1];
  movie = DriveApp.getFileById(itemResponse.getResponse());
  movie.setName(fileName);
}

/**
 * 日付をフォーマットする
 */
function dateToStr24HPad0(date, format) {
    
  if (!format) {
  // デフォルト値
    format = 'YYYY/MM/DD hh:mm:ss'
  }
    
  // フォーマット文字列内のキーワードを日付に置換する
  format = format.replace(/YYYY/g, date.getFullYear());
  format = format.replace(/MM/g, ('0' + (date.getMonth() + 1)).slice(-2));
  format = format.replace(/DD/g, ('0' + date.getDate()).slice(-2));
  format = format.replace(/hh/g, ('0' + date.getHours()).slice(-2));
  format = format.replace(/mm/g, ('0' + date.getMinutes()).slice(-2));
  format = format.replace(/ss/g, ('0' + date.getSeconds()).slice(-2));
    
  return format;
}

実際に作成したコード

こちらをクリック
function myFunction(e) {
  var itemResponse;
  var fileName;
  var photo1;
  var photo2;
  var no = 1;    // ファイルアップロード時の連番
  
  //回答のオブジェクトを取得
  var itemResponses = e.response.getItemResponses();
  
  // お名前の回答結果を取得する
  itemResponse = itemResponses[1];
  fileName = itemResponse.getResponse() + '_' + dateToStr24HPad0(new Date(), 'YYYYMMDDhhmmss');
  
  // ファイルの回答結果を取得する
  itemResponse = itemResponses[31];
  itemResponse.getResponse().forEach(function( uploadFile ) {
    photo1 = DriveApp.getFileById(uploadFile);
    var ext = getExt(photo1.getName());
    photo1.setName(fileName + '_' + no + '.' + ext);
    no++;
  });

// ファイルの回答結果を取得する
  itemResponse = itemResponses[32];
  itemResponse.getResponse().forEach(function( uploadFile ) {
    photo2 = DriveApp.getFileById(uploadFile);
    var ext = getExt(photo2.getName());
    photo2.setName(fileName + '_' + no + '.' + ext);
    no++;
  });
}

// フォーマットする自作関数
function dateToStr24HPad0(date, format) {
    
  if (!format) {
  // デフォルト値
    format = 'YYYY/MM/DD hh:mm:ss'
  }
    
  // フォーマット文字列内のキーワードを日付に置換する
  format = format.replace(/YYYY/g, date.getFullYear());
  format = format.replace(/MM/g, ('0' + (date.getMonth() + 1)).slice(-2));
  format = format.replace(/DD/g, ('0' + date.getDate()).slice(-2));
  format = format.replace(/hh/g, ('0' + date.getHours()).slice(-2));
  format = format.replace(/mm/g, ('0' + date.getMinutes()).slice(-2));
  format = format.replace(/ss/g, ('0' + date.getSeconds()).slice(-2));
    
  return format;
}

// 拡張子を取得
function getExt(filename) {
    return filename.match(/[^.]+$/);
}

つまづいたところ

とはいえ、初心者なので、つまづいたところと、
そのエラーの解決策についてご紹介します!

実行を押してもエラーになってしまう

コードは合っているのになぜ、エラーになるんじゃあ!!!
image.png

解決策

冒頭のコードなのですが、
function myFunction(e) {
フォーム送信時のトリガーで関数が実行されるようになっているので、
実行を押してやろうとしても、エラーになっちゃう。とのことでした。
実際にフォームを送信したら、問題なく実行されたので、
動くかどうか見たい時は、実際にフォームを送信してください^^

返すオブジェクトがないですよ

何か分かんないけど、調べると返すものがないですよと言われているらしい。。。
image.png

解決策

参考記事のコードをそのままコピペしたので、
私が実際につくったフォームと拾ってくるところが違うのが原因でした。
なので、itemResponse = itemResponses[ ];の[ ]の番号を変えました^^

無題のプロジェクト-プロジェクト編集者-Apps-Script.png

オブジェクトの配列は0から数えるので、1引いた数字を入れてね!

もともとのコードから工夫したところ

写真を回収する設問が2つあったので、
Photo1Photo2で宣言してみました。
無題のプロジェクト-プロジェクト編集者-Apps-Script (1).png

まとめ

自分、やればできるじゃん!!!www
同じことをやってみたいなあと思っている方の
力になれば幸いです。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?