前回、Microsoft Graph APIのOAuth2.0認証を取得する所まで用意することが出来ました。今回はそれに引き続き、OneDriveに配置してあるExcelファイルからデータを取得して、自身のスプレッドシートに書き込みまでを実装してみました。

ただし、Googleのそれとは文化がだいぶ異なるのと、REST APIを叩くことで操作をする方式なので、GASの流儀で操作は出来ません。単純にデータを取得して貼り付けてるだけなので、より発展的な操作をするためには何度もAPIを叩く必要があるので、少し面倒ですね。

今回使用するファイルとサイト

今回はOneDriveルート直下のファイルにアクセスします。データはeStatの統計データを入れてあります。

事前準備

OneDriveやSharePointはローカルのファイルサーバと同じく、同じディレクトリ内に同じファイル名が存在できないルールになっています。また、Office365のExcelのURLにはファイルIDが含まれておらず、事前にMicrosoft Graph Explorerからクエリを実行して、対象のファイルのIDを取得しておく必要があります。(GASのようなメソッドチェーンでURLからID取得するようなことが出来ないのが不便)

ファイルのIDを取得する手順は以下の通り。

  1. Graph Explorerサイトを開き、自分のアカウントでサインインする。
  2. GETにて、「https://graph.microsoft.com/v1.0/me/drive/root/search(q=’.xlsx’)?select=name,id,webUrl」を実行。今回は、OneDriveルート直下のxlsxを調べます。
  3. 検索結果が応答のプレビューに出てくるので、対象のファイルのidを控えておく。
  4. 特定のフォルダ内のファイルを調べる場合には、rootの部分にフォルダのIDを入れて調べる。

図:ちょっと手間の掛かる手順が必要。

結果:試しにシート一覧を取得してみた。

コードと実行結果

GAS側コード

  • データは通常の配列データで返ってきますので、扱いは簡単です。
  • endpointに様々なURL情報を付け加えるのですが、ワークシートはシート名指定で行けます。レンジの範囲も通常のExcel上の範囲指定と同じ形式が利用できます。
  • worksheets(シート名)/usedrangeにて、データのある最終行を取得出来ます。

実行結果

メニューより、「Excelデータ」⇒「データの取得」を実行します。実行すると、OneDrive上のExcelからデータをひっこぬいて、Googleスプレッドシート側に書き込まれます。

図:そっくりそのままコピーしてきました。

関連リンク