2020年11月24日火曜日

Googleフォームのファイルアップロードデータを抽出し、ファイル名を変更して特定フォルダに一括保存する(Google Apps Script)

 Google フォームのファイルアップロードを使ってアップロードされたファイルは、下図のように、「ファイル名 - 名前(Googleアカウントのプロフィール).ファイルの拡張子」という名前になります。


しかしながら、
  1. 申請する人が、代理かもしれない
  2. いつ申請したかファイル名だけでは判別しづらい
という問題があり、ファイル名について

年-月-日_登録者名_ファイル名 - 申請者名(Googleアカウントのプロフィール).ファイルの拡張子

のように、ファイル名の目視だけでもう少しはっきりとわかるようにできたら便利です。
下図はその例です。
  • 登録者名1:テスト2
    • 3ファイル:test1.xlsx, test2.xlsx, test3.xlsx
  • 登録者名2:ほげほげ
    • 1ファイル: test.xlsx
これを、Google Apps Script で実装してみます。
ただし説明を容易にするために、極めてシンプルな構造にしています。

STEP 1. Googleフォームを作成する



今回は例のため、項目は2つ(名前、ファイルアップロード)にしています。メールアドレスの収集なども行いません。ただし、ファイルアップロードは、申請者の Googleアカウントのマイドライブ直下に一旦アップロードする手法になるため、Googleアカウントのログインが必須になります。

作成し終わったら、「回答」タブにある、「スプレットシートの作成」ボタンをクリックし、回答内容を Googleスプレットシートに保存できるようにします。



STEP 2. 一括保存するフォルダを作成


Googleドライブ内に、フォルダを作成します。
ここではサンプルとして、Googleフォームを作成したフォルダ直下に「Attached Documents」というフォルダを作成します。



STEP 3. Google Apps Script を用意する


回答先 Googleスプレットシートを開き、ツールメニューから「スクリプトエディタ」を開きます。


すると上図のようなサンプルコードが出てきます。
これらのコードはすべて削除した上で、下記のリンク先を開いて出てきたテキストを「すべて選択」しコピー、上記コードにペーストしてください。
すると、下図のようになるはずです。

次に Google Apps Scriptのプロジェクトを保存してファイル名をつけてください。
ここでは getAttachedDocuments という名前にします。


次に必要な4つのパラメーターの設定を行います。



OUTPUT_FOLDER_ID


一括出力先フォルダ(例だと、Attached Documents)のフォルダID(下図の赤枠)を調べてコピーし、


それを、Google Apps Script の === FOLDER ID === と置き換えます。

実際のコードは下記の通り
  • var OUTPUT_FOLDER_ID = '=== FOLDER ID ==='; 

INPUT_SpreadSheet_ID


Googleフォームの回答先 GoogleスプレットシートのIDを調べて、コピーし、


それを、Google Apps Script の === Google SpreadSheet ID === と置き換えます。

実際のコードは下記の通り
    •   var INPUT_SpreadSheet_ID ='=== Google SpreadSheet ID ===';
      

    INPUT_SpreadSheet_num


    アップロードされたファイルのURLされている項目の項目番号を調べます。
    今回の場合、項目番号は 0から始まり、A列 = 0、B列 = 1、、、と続きます。

    今回の例は、入力項目は「名前」「ファイルアップロード」の2つです。
    Googleフォームが最初に入力された時刻を自動保存(タイムスタンプ)を保存するため、
    • A列(項目番号 0) = タイムスタンプ
    • B列(項目番号 1) = 名前
    • C列(項目番号 2) = ファイルアップロード(URL、複数の場合にはコンマ区切り)
    となっています。

    そのためファイルアップロードのための項目番号は 2となり
    • var INPUT_SpreadSheet_num = 2; // Item of Attached File Link (start is 0)
    のように値を 2 に置き換えます。

    OUTOUT_FOLDER_name_num


    最終的に下記のファイル名になりますが、このうち「名前」(登録者名)にあたる項目番号を調べます。
    • 年-月-日_登録者名_ファイル名 - 申請者名(Googleアカウントのプロフィール).ファイルの拡張子

    今回の項目番号は 1 となります。
    • A列(項目番号 0) = タイムスタンプ
    • B列(項目番号 1) = 名前
    • C列(項目番号 2) = ファイルアップロード(URL、複数の場合にはコンマ区切り)
    したがって、値を 1 に置き換えます。
    •   var OUTOUT_FOLDER_name_num = 1; // Item of Name (start is 0)

    そしてプロジェクトを保存します。

    STEP 4. 作成した Google Apps Scriptを実行してみる

    まずはいくつかテスト的にフォームに入力します。

    今回のテスト例は下記のようになります。
    申請者のGoogleアカウントプロフィール名(Kimiya Kitani)
    • 登録者名1:テスト2
      • 3ファイル:test1.xlsx, test2.xlsx, test3.xlsx
    • 登録者名2:ほげほげ
      • 1ファイル: test.xlsx

    Google Apps Scirpt(ここでは getAttachedDocumentsで保存)の▶(実行)ボタンをクリックします。
    • 最初の1度だけ後述する許可設定が必要です。
      *Goolge Workspace や G Suite for Education アカウントの場合には、この許可設定を聞いてこないことがあるかもしれません。
    うまくいけば、Attached Documents フォルダ内に、下記のように意図したファイル名になっていると思います。
    いろいろカスタムしたい場合には、
    をダウンロードして、適当に自由に改変してみればよいでしょう。

    許可設定


    1. 「許可を確認」ボタンをクリック

    2. Google Apps Scriptを作成した Googleアカウントを選択


    3. 「詳細」リンクをクリックし、getAttachedDocuments(安全ではないページ)に移動リンクをクリック



    4. getAttachedDocuments に対して必要な権限を許可します。



    2020年11月24日 @kimipooh

    2020年8月28日金曜日

    【検証】Googleグループのメールアドレスを変更し、さらに元の名前に戻せるのか

     Googleグループは、無料版と G Suiteクラウドサービス版があります。それぞれどうなるか試してみます。


    無料版 Googleグループの場合


    古いUIのGoogleグループの場合、グループ名の変更(すなわちメーリングリストのアドレス変更)が可能です。検証の結果、古いグループは削除され、新規取得可能になっています。

    変更前:cseas-tech 

    変更後:cseas-tech2 

    変更自体は問題なくできました。


    Googleドライブの共有


    cseas-tech → cseas-tech2 へ自動変更されていました。


    変更前のGoogleグループは?


    存在しなくなっていました。Web版 Googleグループへのアクセスも「存在しません」となりました。

    Googleグループのアドレスをもとに戻せるか?


    戻せませんでした。
    cseas-tech2 → cseas-tech に名称変更しようとすると、「このグループのメールはすでに使用されています」と出ます。

    変更前のアドレスで Googleグループを「新規」作成できるのか?


    できてしまいました。
    名称変更ではすでに使用されているとでているのに、新規作成できたということは、なにか表示にバグがあるのかなぁと思います。名称を変更した時点で、前のアドレスは存在しなくなったと考えるのが妥当なためです。 



    ただバグだと思われますが、奇妙な事が起こりました。
    新しく作成した cseas-tech について、古い Googleグループの管理UIでは問題ないのに、新しいUIでは、なんと cseas-tech2 だと誤認識してしまっているのです。
    実際のメンバーやグループ名は区別できるようにしているので、 新規作成した cseas-tech であるのは間違いありません。また cseas-tech2 に変更した方は、新旧UIでちゃんと認識しているので、表記のバグだろうなぁとは思います。もしかしたら新しいUIではしばらくキャッシュに残ってしまうのかもしれませんね。




    G Suite の Googleグループの場合


    基本的な動作は無料版 Googleグループと同じでした。
    しかし、次の点で異なります。
    • 変更前のアドレスがエイリアスとして追加されている
    hogehoge @ 独自ドメイン → hogehoge2 @ 独自ドメイン
    に変更した場合

    メインアドレス:hogehoge2 @ 独自ドメイン
    エイリアス:hogehoge @ 独自ドメイン

    となってどちらにも届くということです。
    エイリアスは、G Suiteの特権管理者によって削除できます。
    しかし、もしドメインエイリアスを使っている場合には、そのアドレスは削除できません。

    ドメインエイリアス: hohoho.独自ドメイン

    だとするなら
    メインアドレス:hogehoge2 @ 独自ドメイン
    エイリアス:
     hogehoge @ 独自ドメイン(削除可能)
     hogehoge @ hohoho.独自ドメイン(削除不可)

    となるわけです。まぁドメインエイリアスのアドレスを使っていないのなら無視できる問題ではあります。

    もとのアドレスに戻した場合


    hogehoge2 @ 独自ドメイン → hogehoge @ 独自ドメイン

    と戻した場合
    メインアドレス:hogehoge @ 独自ドメイン
    エイリアス:hogehoge2 @ 独自ドメイン(削除可能)

    となります。
    ドメインエイリアス(hohoho.独自ドメイン)があるなら、

    メインアドレス:hogehoge @ 独自ドメイン
    エイリアス:
     hogehoge2 @ 独自ドメイン(削除可能)
     hogehoge2 @ hohoho.独自ドメイン(削除不可)
     hogehoge @ hohoho.独自ドメイン(削除不可)

    とまぁエイリアスが残っていくわけです。
    これは、hogehoge2 @ 独自ドメインのGoogleグループを新たにとったとしても、変化がありません(hogehoge @ 独自ドメインの方に、hogehoge2 @ hohoho.独自ドメイン が付与されたまま変更不可になってしまう)。これは少し厄介かもしれませんね。現状操作できる範囲でみると、これを解消するには一旦グループを削除して作り直す必要がありそうです。

    2020年8月28日 @kimipooh





    2020年7月28日火曜日

    【備忘録】Web版 Gmailで、Yahoo! Japan(@yahoo.co.jp)メールをPOP3受信する方法

    Gmailヘルプコミュニティで何度かできないという質問があったこともあり、久しぶりに手順を確認してみました。

    STEP 1.  @yahoo.co.jp側でPOP3受信設定を有効にする


    メールソフトで送受信するには(Yahoo!メールアドレスの場合)にある Yahooの説明の通り、

    1. POP3の有効化
    2. Yahoo!ダイレクトオファーの登録
    をチェックしてください。無料版Yahooメールアドレス場合「2」が必要な点に注意です。

    STEP 2. Gmail(https://gmail.com)側ので受信設定


    差出人を @yahoo.co.jp にして送信もしたい場合には、下記を参考にしてみてください。

    ここでは受信だけする設定を説明します。

    1. Gmailにログインし、歯車 > すべての設定 > アカウントとインポートを開きます。「他のアカウントのメールを確認」より「メールアカウントを追加する」をクリックします。

    2. Yahooのメールアドレスを入力して、「次へ」

    3. POP3を選択して「次へ」

    4. ユーザー名:Yahooのメールアドレス
     パスワード:Yahooのパスワード

     をいれます。
     「ラベル付与」しておくのはオススメです。
     サーバーに残す(Yahoo側)かどうかは任意です。

    *なお以後、設定変更が生じた場合にこの画面を開くことになりますが、パスワードは空欄になっています。どうやら改めてパスワードをいれて保存しなおさないと設定が保存できないようにセキュリティ保護がかかっているようですね。

    5. 「メールを今すぐ確認する」をクリックして、取り込んでみます。

    うまく取り込めたら下図のように、0分前、○件のメールを取得しましたなどメッセージが出てくることでしょう。
    実際にYahooのメールボックスを見てみると、
     受信箱 :0件
     下書き :1件
    迷惑メール:32件
    合計、33件が取得できたということで数が一致してますね。


     6. テストしてみる(GmailからYahoo宛にメールしてみる)

    下図のように受信箱0件から、1件になってメールが届いていることがわかります。


    で「メールを今すぐ確認する」をクリックして、取り込んでみます。

    うまく取り込めました。なお「詳細を表示」リンクをクリックすると、最近の受信ログを見ることができます。最初は33件、次は1件受信できていますね。またそれから2度メールを取り込んでみましたが、メールなし(届いていないので)でした。



    ということでうまく受信設定ができているということになります。
    もし突然受信できなくなってしまったのなら、一度削除して改めて設定し直すのが良いと思います。

    2020年7月28日 @kimipooh

    2020年7月2日木曜日

    カスペルスキーで最近、MacのChrome で「この接続ではプライバシーが保護されません」が出る

    ここ最近、Google Chromeヘルプコミュニティでいくつか、Chromeでサイトが開けなくなったという質問が増えてきました。これらについては、カスペルスキーのHTTPSスキャン機能が原因の可能性が高いということです。
    を参考に、
    • ネット決済保護とWebトラッキング防止の使用時には安全な接続を確認する(HTTPS)
    をオフにすることで解決したという事例もありました。
    筆者が使っている ESETでも過去に似たようなことがあり、
    を参考に、SSL/TLSプロトコルフィルタリングをオフにしたことがあります。
    どうもSSL証明書の検証で引っかかっているように見えますねぇ。

    2020年7月2日 @kimipooh

    2020年6月3日水曜日

    【G Suite】Google Chat のチャットルームに外部Googleアカウントが追加可能に!


    下記の情報で5月26日(スケジュールリリース設定の場合)から15日以内に適用されると知ってはいましたが、手元の G Suite アカウントでは本日(6月3日)に適用されていることを確認しました。
    Google Chatは従来、同じG Suite契約範囲内でしか使えませんでした。しかし実際の打ち合わせなどオンラインでのテレワークが増えるにつれて
    • 業者とのやり取り
    • こちらが主催するイベントの打ち合わせ
    • オンライン授業や会議時のサポート(つながらないとか)
    をする際に、外部の人たちもチャットに入れないのはとても不便に感じていました。しかしそれができるようになったというのは朗報です!

    設定としては

    STEP 1. G Suite 管理者によって G Suite 管理コンソールから権限設定が必要


    上記を参考に管理者によって許可設定が必要です。

    その上で、

    STEP 2. 組織外(外部)のユーザーの参加を許可した「チャットルーム」の作成をする


    ざっと見た感じでは、既存のチャットルームには組織外ユーザーの参加を許可する設定項目がありませんでした。新規作成の場合には下記のようにチェックをつける項目が表示されました。


    これを付けておけばOKですね。
    なお許可しない設定でチャットルームが作成されていたら、下記のように追加できないと警告がでます。



    STEP 3. 組織外(外部)ユーザーをチャットルームに追加する


    追加しようとすると警告がでてきます(このあたりはG Suite 管理コンソールの設定次第)。「確定」ボタンを押します。


    すると、招待された側には下図のような招待メールがきます。


    ただし、2020年6月3日現在、上図の CHATを使ってみるのリンク先(https://chat.google.com)にアクセスしてもチャットルームが表示されていません。



    実際には、招待されているだけの状態なので、チャットルームの直URLから入って「参加」ボタンを押す必要があったのですね。

    STEP 4. 参加する


    チャットルームの直URLを、チャットルームを作成したG Suiteアカウント保持者に聞いてください。チャットルームを作成したG Suite アカウント側は、チャットルームに入り、そのURLを教えればよいです。



    参加すると、
    https://chat.google.com
    でアクセスしたチャット画面の左サイドメニューに参加したチャットルームが表示されているはずです!



    2020年6月3日 @kimipooh

    2020年5月30日土曜日

    Googleグループヘルプコミュニティが新設!

    Googleグループに関する質問がある場合(Gmailヘルプコミュニティ)に Google社員から投稿(公開)が入っているのに気づきました。これによれば、新しい Googleグループをリリースするのに伴い、Googleグループヘルプコミュニティを新設するのだとか。


    探してみると上記のように新設されていましたね!
    で新しい Googleグループって何?って思ったのですが、新しい Google グループのベータ版をリリース(G Suite アップデートブログ)にあるような、UIを Gmailに近づけたものになるやつかなぁ。これって無料版 Googleグループにもやってくるのだろうか?その手の情報は探せていませんが、新しい何かが生まれようとしているのは、なにかワクワクしますね!

    2020年5月30日 @kimipooh

    2020年4月18日土曜日

    【G Suite専用】 Gmail の左サイドメニューから Google Hangouts Meet に直接参加できるようになる

    Start or join a Google Meet video meeting directly from Gmail (G Suite Updates Blog)

    をみると G Suite アカウントの Gmailから直接 Google Hangouts Meet のミーティングルームを作成したり、参加したりできるようになるとか。普段はGoogleカレンダーからミーティングルームを作っているので、そちらはそのほうがいいかなと思いつつ、参加は便利そうだなと思いました。


    ヘルプはまだ英語版しかないようです。

    リリース時期


    早期リリース設定をしている場合には、4月16日段階的に実装(15日以内)ということです。私が管理する無料版 G Suite (即時リリース)はまだ実装されていないので待ち状態っですかね。またスケジュールリリースの場合には、4月30日から実装を始めるとのこと。

    この Meetメニューを消したい場合(2020-05-20)




    現時点で手持ちの G Suite だけでなく、無料版 Gmailにも Meetメニューが表示されています。無料版については「無料版Google Meetからの新規会議開始が可能に」(ITMedia)などのニュースになっている通り、9月30日まではほぼ無制限。その後無料版は制限があるものの使い続けることはできるようですね!
    ただ使わない人にとっては煩わしいメニューであるかもしれません。チャットは非表示にできるのに Meetメニューはその手段がないためです。

    消すためには、CSSを上書きするという手段があります。ただしCSSが変更されたら使えなくなるのでその都度、どこを変更したらよいのか調べる必要があります。調べる方法は、Chromeの要素の検証を使って構造を調べていくということになります。

    まず準備として、「新しい Gmail でメール一覧表示の受信日時表示を「日時」表示にしたい!」を参考に、ChromeにStylebot アドオンを入れておきましょう。

    そして設定として



    のようにすれば、現時点では表示を非表示にできるでしょう。それ以上のうまい方法はざっとみた程度ではわかりませんでした。この方法はGmailの表示を日本語にしているときにしか使えませんし、あまりうまい方法とはいえません。とりあえず非表示にはできるぐらいにおもっておいてもらったらよいかと。


    2020年5月20日 追記
    2020年4月18日 @kimipooh