G Suiteには、Google Driveというクラウドストレージサービスがあるので、通常は他のオフィスサービス(Office365)と連携する必要がありませんが、G Suiteをアプリケーションの環境、通常はOffice365を使って、Excelのファイル類などについては、OneDriveやSharepointを利用している事もあるでしょう。

そんな時にGAS側からOffice365とりわけExcelファイルの読み書きができたら非常に便利になると思います。今回はGoogle Apps Scriptにて、Office365側のExcelファイルへアクセスする手順を残しておきたいと思います。

準備するもの・使用するファイル

事前準備

今回のスクリプトはOAuth2.0認証が必要となるため、その為の簡単設定ライブラリとして、OAuth2 for Apps Scriptライブラリを利用させていただきます。また、Office365側では、Application Registration Portalにてアプリの作成を登録し、アプリケーションIDとアプリケーションシークレット等の情報を入手する必要があります。

GAS側の事前準備

ライブラリの追加

以下の手順でOAuth2 for Apps Scriptライブラリを追加しましょう。

  1. スクリプトエディタを開きます。
  2. メニューより「リソース」⇒「ライブラリ」を開きます。
  3. ライブラリを追加欄に「1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF」を追加します。
  4. 現時点ではバージョンは30が最新ですので、それを選択しておきます。
  5. 保存ボタンを押して完了

これで、OAuth2.0認証にまつわる様々な関数を手軽に利用できるようになります。

図:ライブラリを追加した様子

コールバックURLを取得する

コールバックURLとは、認証を完了しAccess Tokenを取得したら戻るべきURLを指定するものです。これは、スクリプトIDをもとに作られているので、スクリプトIDを取得して組み立てます。

  1. スクリプトエディタのメニューより「ファイル」⇒「プロジェクトのプロパティ」を開く
  2. 情報の中にある「スクリプトID」を控えておく。
  3. https://script.google.com/macros/d/スクリプトID/usercallback として組み立てる。これがコールバックURLとなる。

図:スクリプトIDはファイル毎に異なるのです。

Office365側の事前準備

続いて、Office365側での処理を行います。ここでは、アプリケーションの作成を行い、アプリケーションIDとアプリケーションシークレット等を生成します。

  1. Application Registration Portalにログインする。
  2. アプリの追加ボタンを押す。
  3. Application Nameを入力しCreateボタンを押します。アルファベット以外も使えますよ。
  4. この段階でアプリケーションIDはすでに生成されているので、控えて置きます。
  5. アプリケーションシークレットにて、「新しいパスワードを生成」をクリックし、パスワードを発行します(このパスワードはこの時の1回しか表示されません)。
  6. 「プラットフォームの追加」にて、追加ボタンを押し、Webを選択。
  7. ここで、GAS側で取得したコールバックURLをリダイレクトURLに入力します。
  8. Microsoft Graphのアクセス許可では、スコープを設定します。User.Read、Files.ReadWrite、offline_accessを追加します。offline_accessを入れないと「リフレッシュトークン」が取得できないので、注意。
  9. 保存ボタンを押して完了です。

図:スコープの設定で許可するアクションを選びます。

認証を行う処理を作成する

OAuth2 for Apps Scriptのページの「Create the OAuth2 Service」にあるコードを元に、Google Apps Script側で構築をします。この時、Office365側で取得したアプリケーションIDやシークレットを使います。

GAS側コード

HTML側コード

template.htmlというダイアログ用のファイルを用意します。ここでアクセス承認を実行し、ログインをすると、アクセストークンその他が取得可能になります。

  • 実際にこれらのコードで、startoauthを実行すると、スプレッドシート上で認証用のダイアログが出ます。
  • 認証でoffice365アカウントにログインします。
  • 取得したAccess Tokenほかはスクリプトプロパティのoauth2.Microsoft Graphという項目にガッツリ値が格納されます。ここにはAccess Token, Refresh Token, expire_inのタイムなどが入っています。
  • reset関数はログアウトされて、再度認証ができるようになります。

図:Microsoft側でのOAuth認証画面

関連リンク

共有してみる: