はじめに
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(/[^.]+$/);
}
つまづいたところ
とはいえ、初心者なので、つまづいたところと、
そのエラーの解決策についてご紹介します!
実行を押してもエラーになってしまう
解決策
冒頭のコードなのですが、
function myFunction(e) {
フォーム送信時のトリガーで関数が実行されるようになっているので、
実行を押してやろうとしても、エラーになっちゃう。とのことでした。
実際にフォームを送信したら、問題なく実行されたので、
動くかどうか見たい時は、実際にフォームを送信してください^^
返すオブジェクトがないですよ
何か分かんないけど、調べると返すものがないですよと言われているらしい。。。
解決策
参考記事のコードをそのままコピペしたので、
私が実際につくったフォームと拾ってくるところが違うのが原因でした。
なので、itemResponse = itemResponses[ ];
の[ ]の番号を変えました^^
オブジェクトの配列は0から数えるので、1引いた数字を入れてね!
もともとのコードから工夫したところ
写真を回収する設問が2つあったので、
Photo1
とPhoto2
で宣言してみました。
まとめ
自分、やればできるじゃん!!!www
同じことをやってみたいなあと思っている方の
力になれば幸いです。