ミケガモのブログ

複数のGoogleスプレッドシートの共有・オーナー変更をGASでまとめて実行

はじめに

先日、複数あってごちゃごちゃしていた自分のGoogleアカウントたちを整理していた。その中で、

あるアカウントで管理・編集しているスプレッドシートたちを、別のアカウントにまとめて移行する

という手段が欲しくなったので、ググってみた。

ちなみに、これを手作業でやろうと思うと、

  1. 旧アカウントでスプレッドシートの編集画面に行く(以下は全て旧アカウントでの操作)
  2. 右上の「共有」ボタンから、新アカウントのアドレスを入力して招待
  3. もう一度「共有」ボタンから、新アカウントを「オーナーにする」
  4. 必要があれば、さらに「共有」ボタンから旧アカウントを「削除」

以上を全てのスプレッドシートに対して行う必要がある。 また、複数のファイルに連続して招待すると、 招待の反映が遅くなったり、「オーナーにする」がすぐに選べなかったりすることがある。

一括で作業しなければ、とても効率が悪くて敵わない。

参考にした方法

こちらのGoogle Apps Script (GAS)をベースにする。 基本的にはこの記事の説明に従って進めればよい。 スプレッドシートも、下記の方法でシートファイルの権限を変更してやれば目的が果たせる。

qiita.com

基本的な使い方は、スクリプトの作者様が用意しているREADMEを参照。

github.com

変更点

上で紹介したスクリプトの中で、オーナー権限変更を実行するのは以下の関数である。

function chownIfNeeded(fileOrFolder) {
  if (fileOrFolder.getOwner().getEmail() === me) {
    fileOrFolder.setOwner(NEW_OWNER);
  }
}

このうちの「setOwner」が、オーナー権限をセットするコマンドだ。

この「setOwner」を、編集権を与えるコマンド、 すなわち「addEditor」に置き換えてやれば、編集者を追加できる(=「招待」したのと同じ)。

置き換えたコードは以下。

function chownIfNeeded(fileOrFolder) {
  if (fileOrFolder.getOwner().getEmail() === me) {
    fileOrFolder.addEditor(NEW_OWNER);
  }
}

これを元のコードの中に戻して実行すれば、まとめて編集者追加できる。 その後、元のオーナー変更のスクリプトを実行して、作業完了となった。

自分は念のため、

「addEditor」のスクリプト実行 → 編集者追加を確認したら「setOwner」のスクリプト実行

と段階を踏んで、動作を確認しながらスクリプトを実行した。 そんなに慎重になる必要は無いと思えるなら、「addEditor」と「setOwner」の2コマンドを続けて記述すれば、 一発で作業が終わるはず。

豆知識

実行時間

編集者追加・オーナー変更の各スクリプトとも、数十個のファイルに対しての実行に2~3分かかった。

出てきたエラー

フォルダの中にbatファイルが1つ紛れ込んだ状態で動かしたら、スクリプトがエラーを吐いて動かなかった。 batファイルを削除し、フォルダの中身をスプレッドシートのみにしたところ、正常に動作した。

スプレッドシートスクリプトエディタが開けない

スプレッドシートのマクロ(スクリプトエディタ)は、 使っているブラウザにおけるデフォルトのGoogleアカウントでログインしている時しか編集できない。

そのせいで、デフォルトの旧アカウントから、サブ運用の新アカウントにマクロ付のシートを移行した時、 スクリプトエディタが「現在、ファイルを開くことができません」というエラーが出た。

自分は旧アカウントをデフォルトアカウントのままにしたかったので、 別のブラウザをダウンロードして、それのデフォルトを新アカウントに設定して解決した。

www.acrovision.jp

参考

Googleドライブ内のフォルダIDの確認方法 amehal.blogspot.com

ファイル・フォルダに対するGASコマンドの一覧(英語) developers.google.com