見出し画像

#23 シートを複製して保護する(Google スプレッドシート)

はじめに

Facebook のグループに、次のような質問が寄せられていました。

【質問】
保護済のスプレッドシートのファイルをコピーすると、コピーされたファイルにその保護が反映されない…?

https://www.facebook.com/groups/google4education.jp/posts/3105864882958426/

スプレッドシートに設定された保護の状態を含めてコピーする場合には、「Google ドライブ」で「コピーを作成」を選択してはいけないようです。

Google ドライブで「コピーを作成」では、保護の状態が削除される

「Google スプレッドシート」の「ファイル」→「コピーを作成」であれば、保護されている状態なども含めてコピーできますが、

Google スプレッドシートで「コピーを作成」を選択する

しかしながら、そもそもはじめにシートを児童生徒の人数分だけ作成して、それぞれのシートに編集可能なユーザーを設定していくこと自体が面倒な作業なように思います。それ故に、「その作業をもう一度行いたくない!」という感情からの質問だったのだと思います。

ということで、はじめの状態を簡単に設定できるスクリプトを作ってみました。

作成したプログラム

作成した Google スプレッドシート

できあがった Google スプレッドシートは、上の図のような感じです。スプレッドシート ID を指定して、「シート名」「編集を許可するユーザー」の一覧を作成して、ボタンを押せば元となるシートを複製して、それぞれのシートを当該ユーザーしか編集できないようにします。
スプレッドシート ID というのは、API のリファレンスでは次のように説明されています。要するに、対象となるスプレッドシートを開いて、その URL の途中部分の文字列を指している、ということです。

A spreadsheet ID can be extracted from its URL. For example, the spreadsheet ID in the URL https://docs.google.com/spreadsheets/d/abc1234567/edit#gid=0 is "abc1234567".

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openbyidid

使い方

以下の URL にアクセスして、Google スプレッドシートを自身の Google ドライブにコピーして、お使いください。

https://docs.google.com/spreadsheets/d/1Sv7F1-R8Cq497a9zBQODlDGwEoXEvZZPrc5r0c-LmKo/copy

スプレッドシート内でも使い方を説明していますが、次のように使用します。

  1. セル B1 に処理の対象となる「Google スプレッドシート」のスプレッドシート ID を入力します。

    • ここで指定するスプレッドシートには、コピーする元となる「シート」が存在していて、そのシートがアクティブな状態になっていなければなりません。

    • シートの数が 1つであれば、間違いありません。余分なシートは削除しておくといいでしょう。

  2. 4行目以降の列 A に複製する「シート名」、列 B に編集可能にする「ユーザー」を入力します。

    • 同じ名前のシートは作成できないので、「シート名」は既存のシートも含めて重複しないようにしましょう。

    • このスクリプトを実行すると、複製されたシートは「自身」と「指定されたアカウント」だけが編集可能な状態になります。

    • 詳細は後述しますが、列 B の内容にメールアドレスを , で区切って複数記述してもエラーになります。

    • 列 A が空欄になっている部分まで処理をくり返すので、入力したデータの途中に空行は作らないこと。

  3. 「複製と保護」ボタンを押すと処理が実行されます。

はじめて実行するときには、API を利用した GAS のスクリプトを実行するために、実行するためのアカウントやどこまでの情報にアクセスするかの確認が求められます。
この辺りの操作は、別の記事にまとめてあるので「#01 GAS のスクリプトを実行するときに...|ともかつのノート|note」をご覧ください。

実際のプログラム

そんなに長いプログラムではありません。コメントも付してあるので、必要に応じてカスタマイズしてください。

カスタマイズのポイント

考えられる変更点として、現状では保護したシートを編集可能なのはファイルのオーナーである自分と、一覧で指定されたユーザーの 2人だけになります。この辺りを変更する場合には、29行目の部分と同様に、addEditors(emailAddresses)  で編集者を追加してください。
副担任のような固定のユーザーを追加するのであれば、固定値で addEditors(emailAddresses) を実行してやればいいでしょうし、複数人の児童生徒を追加したいのであれば、列 B 以降に入力するようにして、それらの値も追加したやればいいでしょう。

最後に

最後に、お決まりのフレーズを書いておきます。

  • 一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。

  • スプレッドシートへの書き出しを行っていますが、上記で説明している以外の場所への書き出しや収集などは行っていません。

  • 特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。

この「スプレッドシート+GAS」が役に立てば、幸いです。


この記事が気に入ったらサポートをしてみませんか?