【GAS】自動受付&仕分け&台帳作成システム(4)~投稿作品を保管するフォルダとフォルダへのリンクを自動作成する~
いつ来るか分からない、誰が送ってくるか分からないものについて、投稿先を掲示して何らかの提出物を受け付けるシステムのご紹介で、以下の記事の続きになります。
受け付けの入り口として投稿フォームを作成し、投稿されたら受け付け番号を自動生成して、申込者に返信メールを送る&スプレッドシートに記帳するGASを設定するところまでを、以下の記事でご紹介しました。
このシステムでは、投稿者にGoogleフォームからエントリーしてもらうと、受け付け番号自動発行し、これを表題にしたメールを自動返信します。(ここまでが前回の記事)
投稿者は自動返信されたメールに投稿物を添付してリプライすることで、投稿が完了します。
投稿されたメールは、受信側で添付ファイルが抜き取られ、自動的にGoogleドライブ上の所定のフォルダに保管されます。同じ受け付け番号であれば追加で投稿物を送付する事も可能です。
投稿者にとってはエントリーと投稿物の送付という2度手間が発生するものの、受ける側では確実な受け付けができる上、追加や差し替えといったケースで互いに混乱しないメリットもあります。
今回の記事は、エントリーされた後、投稿物を保存する専用フォルダを自動作成する部分のご紹介になります。
Googleフォームの台帳を、受け付け台帳として活用する
投稿物のエントリーはGoogleフォームが最初の入り口となりますが、このフォームの特徴は、投稿内容に紐付けされたGoogleスプレッドシートが自動的に作成される点です。
既に先回の記事では、このシートを利用して、受け付け番号の自動作成と、自動メール送信が出来たかを記入しています。
今回ご紹介するGASは、投稿物を納めるサブフォルダを自動作成するものですが、せっかくですので、サブフォルダの作成が済んだか明示した上で、出来たフォルダのリンクをこの台帳に貼り付けて、投稿物確認をしやすくするところまで実装しましょう。
スプレッドシートでいうと、以下の青字の部分になります。
ここで大事な注意点~Googleフォームの台帳シートの行削除や行追加は厳禁!!!~
ここから先で大事な注意点です。
投稿処理していると、間違ってエントリーしたりする事も多々あると思います。そんな場合の取り消し処理では、行を消したりせず、セルを墨塗りするなどの対応をとりましょう。
・・・といいますのは、Googleフォームの各投稿内容とGoogleスプレッドシートの表記行は密接なつながりがある様で、人為的に行を削除・追加すると、以降の投稿で台帳の記録内容がむちゃくちゃになってしまいます。
空白行が途中で開いたり、Googleフォームの記載とGASによる追記が違う行になったりして、正しく情報を扱えなくなります。
まずルートとなるフォルダの準備
さて、今回の記事のテーマである、投稿物フォルダの自動作成ですが、GASプログラム作成の前に、ルートとなるフォルダをGoogleドライブ上に作りましょう。(今回は「投稿作品」としました)
更に、参加分野(今回は ①イラスト/②小説/③音楽 の3つ)および「その他」ごとに4つのフォルダをその直下に作成します。
ここまでできたら、最後に作成した ①イラスト / ②音楽 / ③小説 / その他 の4つのフォルダIDをメモしておきます。
IDは、フォルダを右クリックして「リンクを取得」メニューを選び・・・
リンクを取得メニューを選ぶと表示されるURLで分かります。
上記URLの ~folders/←から→/?usp~ までの間の記号がフォルダIDです。
サブフォルダを作成するGoogleスクリプト 「親フォルダ」.createFolder(フォルダ名)~
GASを使えば、Googleドライブ上にフォルダを作成するのは簡単です。早速プロジェクトを作成してコードを書いてみましょう。
GASのプロジェクトは、スプレッドシートに付随したものでも良いのですが、ここでは単独でGoogleドライブ上に作ることにします。
上記の様に「投稿作品の保存」というプロジェクトを作成し、プロジェクトを開いて「サブフォルダ作成.gs」というスクリプトを作成します。
スクリプトエディタを開き、適当な関数(ここでは mkSFolder( ) としました)を記述し、ここにコードを書いていきます。
function mkSFolder(){
・・・・記述するコード・・・・
}
新規のフォルダは、以下の1文を書くこと作成できます。簡単ですね!
「親フォルダ」.createFolder(フォルダ名);
ただし今回は、「親フォルダ」はエントリー時の参加部門、フォルダ名は受け付け番号としたいと思います。
つまり、以下の様なエントリー(参加部門が「②小説」、受け付け番号が「C00005」「C00006」)であれば・・・
以下の様に親フォルダに「②小説」の下位に子フォルダ「C00005」、「C00006」を作っていくわけです。
この場合、「参加部門」毎に親フォルダを切り替える必要があります。
親フォルダの切り替えは switch~case 構文で
こうした選択肢による条件分けの場合、switch~case構文を使ってスクリプトを下の様に書きます。
var フォルダID=''; //(初期値ブランク)
// switch文を使ってルートフォルダを条件分岐する
switch(参加部門を記したセル.getValue().substring(0,1)){
// 参加部門の1文字目で分岐
case "①"://選択肢 ①イラスト の1文字目
フォルダID='★「①イラスト」フォルダID ★';
break;
case "②"://選択肢 ②小説 の1文字目
フォルダID='★「②小説」フォルダID ★';
break;
case "③"://選択肢 ③音楽 の1文字目
フォルダID='★「③音楽」フォルダID ★';
break;
default://その他
フォルダID='★「その他」フォルダID ★';
}
//ルートフォルダを取得|親フォルダのIDは該当のものを’~’部に記入
var 「親フォルダ」=DriveApp.getFolderById(フォルダID);
条件によって選んだフォルダIDを使って、以下の様に記述することで、親フォルダを設定できます。
親フォルダ=DriveApp.getFolderById(フォルダID);
この後、スプレッドシートをから取得した受け付け番号をフォルダ名として利用することで、首記のサブフォルダが自動作成されます。
「親フォルダ」.createFolder(受け付け番号);
台帳のスプレッドシートに作成フォルダへのリンクを記載する
さて、作られたサブフォルダの中に受け付けた投稿物を今後保存していくのですが、該当フォルダへのリンクを、Googleフォームの台帳に反映できると、投稿物の内容が確認しやすくて便利ですね。
つまり、上図の右端のリンクURLをクリックすると、
当該サブフォルダの中に直ちにアクセスできる様にしたい訳です。(Googleドライブを開いて該当フォルダを探すのは手間です)
これには、先ほど作成されたサブフォルダのフォルダIDを調査して、スプレッドシートに反映する必要があります。
この方法については、次の記事でご紹介します。
この記事が気に入ったらサポートをしてみませんか?